ncp_matcher/chars/normalize.rs
1/// Normalize a Unicode character by converting Latin characters which are variants
2/// of ASCII characters to their Latin equivalents.
3///
4/// Note that this method acts on single `char`s: if you want to perform full normalization, you
5/// should first split on graphemes, and then normalize each grapheme by normalizing the first
6/// `char` in each grapheme. See the [`graphemes`](super::graphemes) function for more detail.
7///
8/// If a character does not normalize to a single ASCII character, no normalization is performed.
9///
10/// This performs normalization within the following Unicode blocks:
11///
12/// - [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement)
13/// - [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
14/// - [Latin Extended-B](https://en.wikipedia.org/wiki/Latin_Extended-B)
15/// - [Latin Extended Additional](https://en.wikipedia.org/wiki/Latin_Extended_Additional)
16/// - [Superscripts and Subscripts](https://en.wikipedia.org/wiki/Superscripts_and_Subscripts)
17///
18/// If the character does not fall in any of these blocks, it is not normalized.
19///
20/// # Example
21/// ```
22/// # use ncp_matcher::chars::normalize;
23/// assert_eq!(normalize('ä'), 'a');
24/// assert_eq!(normalize('Æ'), 'Æ');
25/// assert_eq!(normalize('ữ'), 'u');
26/// ```
27pub fn normalize(c: char) -> char {
28 // outside checked blocks
29 if c < '\u{a0}' || c >= '\u{20A0}' {
30 return c;
31 }
32 // Latin-1 Supplement, Extended-A, Extended-B
33 if c <= '\u{29f}' {
34 return LATIN_1AB[c as usize - '\u{a0}' as usize];
35 }
36 // between blocks
37 if c < '\u{1e00}' {
38 return c;
39 }
40 // Latin Extended Additional
41 if c <= '\u{1eff}' {
42 return LATIN_EXTENDED_ADDITIONAL[c as usize - '\u{1e00}' as usize];
43 }
44 // between blocks
45 if c < '\u{2070}' {
46 return c;
47 }
48 // Superscripts and subscripts
49 SUPERSCRIPTS_AND_SUBSCRIPTS[c as usize - '\u{2070}' as usize]
50}
51
52/// A char array corresponding to the following contiguous Unicode blocks:
53///
54/// - [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement)
55/// - [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
56/// - [Latin Extended-B](https://en.wikipedia.org/wiki/Latin_Extended-B)
57///
58/// This covers the range `'\u{a0}'..='\u{29f}'`.
59static LATIN_1AB: [char; 512] = [
60 '\u{a0}', // invisible NON BREAKING SPACE
61 '!', // '¡'; '\u{a1}'
62 '¢', // '¢'; '\u{a2}'
63 '£', // '£'; '\u{a3}'
64 '¤', // '¤'; '\u{a4}'
65 '¥', // '¥'; '\u{a5}'
66 '¦', // '¦'; '\u{a6}'
67 '§', // '§'; '\u{a7}'
68 '¨', // '¨'; '\u{a8}'
69 '©', // '©'; '\u{a9}'
70 'a', // 'ª'; '\u{aa}'
71 '«', // '«'; '\u{ab}'
72 '¬', // '¬'; '\u{ac}'
73 '\u{ad}', // invisible SOFT HYPHEN
74 '®', // '®'; '\u{ae}'
75 '¯', // '¯'; '\u{af}'
76 '°', // '°'; '\u{b0}'
77 '±', // '±'; '\u{b1}'
78 '2', // '²'; '\u{b2}'
79 '3', // '³'; '\u{b3}'
80 '´', // '´'; '\u{b4}'
81 'µ', // 'µ'; '\u{b5}'
82 '¶', // '¶'; '\u{b6}'
83 '·', // '·'; '\u{b7}'
84 '¸', // '¸'; '\u{b8}'
85 '1', // '¹'; '\u{b9}'
86 '0', // 'º'; '\u{ba}'
87 '»', // '»'; '\u{bb}'
88 '¼', // '¼'; '\u{bc}'
89 '½', // '½'; '\u{bd}'
90 '¾', // '¾'; '\u{be}'
91 '?', // '¿'; '\u{bf}'
92 'A', // 'À'; '\u{c0}'
93 'A', // 'Á'; '\u{c1}'
94 'A', // 'Â'; '\u{c2}'
95 'A', // 'Ã'; '\u{c3}'
96 'A', // 'Ä'; '\u{c4}'
97 'A', // 'Å'; '\u{c5}'
98 'Æ', // 'Æ'; '\u{c6}'
99 'C', // 'Ç'; '\u{c7}'
100 'E', // 'È'; '\u{c8}'
101 'E', // 'É'; '\u{c9}'
102 'E', // 'Ê'; '\u{ca}'
103 'E', // 'Ë'; '\u{cb}'
104 'I', // 'Ì'; '\u{cc}'
105 'I', // 'Í'; '\u{cd}'
106 'I', // 'Î'; '\u{ce}'
107 'I', // 'Ï'; '\u{cf}'
108 'D', // 'Ð'; '\u{d0}'
109 'N', // 'Ñ'; '\u{d1}'
110 'O', // 'Ò'; '\u{d2}'
111 'O', // 'Ó'; '\u{d3}'
112 'O', // 'Ô'; '\u{d4}'
113 'O', // 'Õ'; '\u{d5}'
114 'O', // 'Ö'; '\u{d6}'
115 '×', // '×'; '\u{d7}'
116 'O', // 'Ø'; '\u{d8}'
117 'U', // 'Ù'; '\u{d9}'
118 'U', // 'Ú'; '\u{da}'
119 'U', // 'Û'; '\u{db}'
120 'U', // 'Ü'; '\u{dc}'
121 'Y', // 'Ý'; '\u{dd}'
122 'Þ', // 'Þ'; '\u{de}'
123 's', // 'ß'; '\u{df}'
124 'a', // 'à'; '\u{e0}'
125 'a', // 'á'; '\u{e1}'
126 'a', // 'â'; '\u{e2}'
127 'a', // 'ã'; '\u{e3}'
128 'a', // 'ä'; '\u{e4}'
129 'a', // 'å'; '\u{e5}'
130 'æ', // 'æ'; '\u{e6}'
131 'c', // 'ç'; '\u{e7}'
132 'e', // 'è'; '\u{e8}'
133 'e', // 'é'; '\u{e9}'
134 'e', // 'ê'; '\u{ea}'
135 'e', // 'ë'; '\u{eb}'
136 'i', // 'ì'; '\u{ec}'
137 'i', // 'í'; '\u{ed}'
138 'i', // 'î'; '\u{ee}'
139 'i', // 'ï'; '\u{ef}'
140 'd', // 'ð'; '\u{f0}'
141 'n', // 'ñ'; '\u{f1}'
142 'o', // 'ò'; '\u{f2}'
143 'o', // 'ó'; '\u{f3}'
144 'o', // 'ô'; '\u{f4}'
145 'o', // 'õ'; '\u{f5}'
146 'o', // 'ö'; '\u{f6}'
147 '÷', // '÷'; '\u{f7}'
148 'o', // 'ø'; '\u{f8}'
149 'u', // 'ù'; '\u{f9}'
150 'u', // 'ú'; '\u{fa}'
151 'u', // 'û'; '\u{fb}'
152 'u', // 'ü'; '\u{fc}'
153 'y', // 'ý'; '\u{fd}'
154 'þ', // 'þ'; '\u{fe}'
155 'y', // 'ÿ'; '\u{ff}'
156 'A', // 'Ā'; '\u{100}'
157 'a', // 'ā'; '\u{101}'
158 'A', // 'Ă'; '\u{102}'
159 'a', // 'ă'; '\u{103}'
160 'A', // 'Ą'; '\u{104}'
161 'a', // 'ą'; '\u{105}'
162 'C', // 'Ć'; '\u{106}'
163 'c', // 'ć'; '\u{107}'
164 'C', // 'Ĉ'; '\u{108}'
165 'c', // 'ĉ'; '\u{109}'
166 'C', // 'Ċ'; '\u{10a}'
167 'c', // 'ċ'; '\u{10b}'
168 'C', // 'Č'; '\u{10c}'
169 'c', // 'č'; '\u{10d}'
170 'D', // 'Ď'; '\u{10e}'
171 'd', // 'ď'; '\u{10f}'
172 'D', // 'Đ'; '\u{110}'
173 'd', // 'đ'; '\u{111}'
174 'E', // 'Ē'; '\u{112}'
175 'e', // 'ē'; '\u{113}'
176 'E', // 'Ĕ'; '\u{114}'
177 'e', // 'ĕ'; '\u{115}'
178 'E', // 'Ė'; '\u{116}'
179 'e', // 'ė'; '\u{117}'
180 'E', // 'Ę'; '\u{118}'
181 'e', // 'ę'; '\u{119}'
182 'E', // 'Ě'; '\u{11a}'
183 'e', // 'ě'; '\u{11b}'
184 'G', // 'Ĝ'; '\u{11c}'
185 'g', // 'ĝ'; '\u{11d}'
186 'G', // 'Ğ'; '\u{11e}'
187 'g', // 'ğ'; '\u{11f}'
188 'G', // 'Ġ'; '\u{120}'
189 'g', // 'ġ'; '\u{121}'
190 'G', // 'Ģ'; '\u{122}'
191 'g', // 'ģ'; '\u{123}'
192 'H', // 'Ĥ'; '\u{124}'
193 'h', // 'ĥ'; '\u{125}'
194 'H', // 'Ħ'; '\u{126}'
195 'h', // 'ħ'; '\u{127}'
196 'I', // 'Ĩ'; '\u{128}'
197 'i', // 'ĩ'; '\u{129}'
198 'I', // 'Ī'; '\u{12a}'
199 'i', // 'ī'; '\u{12b}'
200 'I', // 'Ĭ'; '\u{12c}'
201 'i', // 'ĭ'; '\u{12d}'
202 'I', // 'Į'; '\u{12e}'
203 'i', // 'į'; '\u{12f}'
204 'I', // 'İ'; '\u{130}'
205 'i', // 'ı'; '\u{131}'
206 'IJ', // 'IJ'; '\u{132}'
207 'ij', // 'ij'; '\u{133}'
208 'J', // 'Ĵ'; '\u{134}'
209 'j', // 'ĵ'; '\u{135}'
210 'K', // 'Ķ'; '\u{136}'
211 'k', // 'ķ'; '\u{137}'
212 'ĸ', // 'ĸ'; '\u{138}'
213 'L', // 'Ĺ'; '\u{139}'
214 'l', // 'ĺ'; '\u{13a}'
215 'L', // 'Ļ'; '\u{13b}'
216 'l', // 'ļ'; '\u{13c}'
217 'L', // 'Ľ'; '\u{13d}'
218 'l', // 'ľ'; '\u{13e}'
219 'L', // 'Ŀ'; '\u{13f}'
220 'l', // 'ŀ'; '\u{140}'
221 'L', // 'Ł'; '\u{141}'
222 'l', // 'ł'; '\u{142}'
223 'N', // 'Ń'; '\u{143}'
224 'n', // 'ń'; '\u{144}'
225 'N', // 'Ņ'; '\u{145}'
226 'n', // 'ņ'; '\u{146}'
227 'N', // 'Ň'; '\u{147}'
228 'n', // 'ň'; '\u{148}'
229 'n', // 'ʼn'; '\u{149}'
230 'N', // 'Ŋ'; '\u{14a}'
231 'n', // 'ŋ'; '\u{14b}'
232 'O', // 'Ō'; '\u{14c}'
233 'o', // 'ō'; '\u{14d}'
234 'O', // 'Ŏ'; '\u{14e}'
235 'o', // 'ŏ'; '\u{14f}'
236 'O', // 'Ő'; '\u{150}'
237 'o', // 'ő'; '\u{151}'
238 'Œ', // 'Œ'; '\u{152}'
239 'œ', // 'œ'; '\u{153}'
240 'R', // 'Ŕ'; '\u{154}'
241 'r', // 'ŕ'; '\u{155}'
242 'R', // 'Ŗ'; '\u{156}'
243 'r', // 'ŗ'; '\u{157}'
244 'R', // 'Ř'; '\u{158}'
245 'r', // 'ř'; '\u{159}'
246 'S', // 'Ś'; '\u{15a}'
247 's', // 'ś'; '\u{15b}'
248 'S', // 'Ŝ'; '\u{15c}'
249 's', // 'ŝ'; '\u{15d}'
250 'S', // 'Ş'; '\u{15e}'
251 's', // 'ş'; '\u{15f}'
252 'S', // 'Š'; '\u{160}'
253 's', // 'š'; '\u{161}'
254 'T', // 'Ţ'; '\u{162}'
255 't', // 'ţ'; '\u{163}'
256 'T', // 'Ť'; '\u{164}'
257 't', // 'ť'; '\u{165}'
258 'T', // 'Ŧ'; '\u{166}'
259 't', // 'ŧ'; '\u{167}'
260 'U', // 'Ũ'; '\u{168}'
261 'u', // 'ũ'; '\u{169}'
262 'U', // 'Ū'; '\u{16a}'
263 'u', // 'ū'; '\u{16b}'
264 'U', // 'Ŭ'; '\u{16c}'
265 'u', // 'ŭ'; '\u{16d}'
266 'U', // 'Ů'; '\u{16e}'
267 'u', // 'ů'; '\u{16f}'
268 'U', // 'Ű'; '\u{170}'
269 'u', // 'ű'; '\u{171}'
270 'U', // 'Ų'; '\u{172}'
271 'u', // 'ų'; '\u{173}'
272 'W', // 'Ŵ'; '\u{174}'
273 'w', // 'ŵ'; '\u{175}'
274 'Y', // 'Ŷ'; '\u{176}'
275 'y', // 'ŷ'; '\u{177}'
276 'Y', // 'Ÿ'; '\u{178}'
277 'Z', // 'Ź'; '\u{179}'
278 'z', // 'ź'; '\u{17a}'
279 'Z', // 'Ż'; '\u{17b}'
280 'z', // 'ż'; '\u{17c}'
281 'Z', // 'Ž'; '\u{17d}'
282 'z', // 'ž'; '\u{17e}'
283 's', // 'ſ'; '\u{17f}'
284 'b', // 'ƀ'; '\u{180}'
285 'B', // 'Ɓ'; '\u{181}'
286 'b', // 'Ƃ'; '\u{182}'
287 'b', // 'ƃ'; '\u{183}'
288 'b', // 'Ƅ'; '\u{184}'
289 'ƅ', // 'ƅ'; '\u{185}'
290 'O', // 'Ɔ'; '\u{186}'
291 'C', // 'Ƈ'; '\u{187}'
292 'c', // 'ƈ'; '\u{188}'
293 'D', // 'Ɖ'; '\u{189}'
294 'D', // 'Ɗ'; '\u{18a}'
295 'd', // 'Ƌ'; '\u{18b}'
296 'd', // 'ƌ'; '\u{18c}'
297 'ƍ', // 'ƍ'; '\u{18d}'
298 'E', // 'Ǝ'; '\u{18e}'
299 'e', // 'Ə'; '\u{18f}'
300 'E', // 'Ɛ'; '\u{190}'
301 'F', // 'Ƒ'; '\u{191}'
302 'f', // 'ƒ'; '\u{192}'
303 'G', // 'Ɠ'; '\u{193}'
304 'Ɣ', // 'Ɣ'; '\u{194}'
305 'h', // 'ƕ'; '\u{195}'
306 'I', // 'Ɩ'; '\u{196}'
307 'I', // 'Ɨ'; '\u{197}'
308 'Ƙ', // 'Ƙ'; '\u{198}'
309 'k', // 'ƙ'; '\u{199}'
310 'l', // 'ƚ'; '\u{19a}'
311 'ƛ', // 'ƛ'; '\u{19b}'
312 'M', // 'Ɯ'; '\u{19c}'
313 'N', // 'Ɲ'; '\u{19d}'
314 'n', // 'ƞ'; '\u{19e}'
315 'O', // 'Ɵ'; '\u{19f}'
316 'O', // 'Ơ'; '\u{1a0}'
317 'o', // 'ơ'; '\u{1a1}'
318 'Ƣ', // 'Ƣ'; '\u{1a2}'
319 'ƣ', // 'ƣ'; '\u{1a3}'
320 'P', // 'Ƥ'; '\u{1a4}'
321 'p', // 'ƥ'; '\u{1a5}'
322 'R', // 'Ʀ'; '\u{1a6}'
323 'S', // 'Ƨ'; '\u{1a7}'
324 's', // 'ƨ'; '\u{1a8}'
325 'Ʃ', // 'Ʃ'; '\u{1a9}'
326 'l', // 'ƪ'; '\u{1aa}'
327 't', // 'ƫ'; '\u{1ab}'
328 'T', // 'Ƭ'; '\u{1ac}'
329 't', // 'ƭ'; '\u{1ad}'
330 'T', // 'Ʈ'; '\u{1ae}'
331 'U', // 'Ư'; '\u{1af}'
332 'u', // 'ư'; '\u{1b0}'
333 'Ʊ', // 'Ʊ'; '\u{1b1}'
334 'V', // 'Ʋ'; '\u{1b2}'
335 'Y', // 'Ƴ'; '\u{1b3}'
336 'y', // 'ƴ'; '\u{1b4}'
337 'Z', // 'Ƶ'; '\u{1b5}'
338 'z', // 'ƶ'; '\u{1b6}'
339 'Ʒ', // 'Ʒ'; '\u{1b7}'
340 'Ƹ', // 'Ƹ'; '\u{1b8}'
341 'ƹ', // 'ƹ'; '\u{1b9}'
342 'ƺ', // 'ƺ'; '\u{1ba}'
343 'ƻ', // 'ƻ'; '\u{1bb}'
344 'Ƽ', // 'Ƽ'; '\u{1bc}'
345 'ƽ', // 'ƽ'; '\u{1bd}'
346 'ƾ', // 'ƾ'; '\u{1be}'
347 'ƿ', // 'ƿ'; '\u{1bf}'
348 'ǀ', // 'ǀ'; '\u{1c0}'
349 'ǁ', // 'ǁ'; '\u{1c1}'
350 'ǂ', // 'ǂ'; '\u{1c2}'
351 '!', // 'ǃ'; '\u{1c3}'
352 'DŽ', // 'DŽ'; '\u{1c4}'
353 'Dž', // 'Dž'; '\u{1c5}'
354 'dž', // 'dž'; '\u{1c6}'
355 'LJ', // 'LJ'; '\u{1c7}'
356 'Lj', // 'Lj'; '\u{1c8}'
357 'lj', // 'lj'; '\u{1c9}'
358 'NJ', // 'NJ'; '\u{1ca}'
359 'Nj', // 'Nj'; '\u{1cb}'
360 'nj', // 'nj'; '\u{1cc}'
361 'A', // 'Ǎ'; '\u{1cd}'
362 'a', // 'ǎ'; '\u{1ce}'
363 'I', // 'Ǐ'; '\u{1cf}'
364 'i', // 'ǐ'; '\u{1d0}'
365 'O', // 'Ǒ'; '\u{1d1}'
366 'o', // 'ǒ'; '\u{1d2}'
367 'U', // 'Ǔ'; '\u{1d3}'
368 'u', // 'ǔ'; '\u{1d4}'
369 'U', // 'Ǖ'; '\u{1d5}'
370 'u', // 'ǖ'; '\u{1d6}'
371 'U', // 'Ǘ'; '\u{1d7}'
372 'u', // 'ǘ'; '\u{1d8}'
373 'U', // 'Ǚ'; '\u{1d9}'
374 'u', // 'ǚ'; '\u{1da}'
375 'U', // 'Ǜ'; '\u{1db}'
376 'u', // 'ǜ'; '\u{1dc}'
377 'e', // 'ǝ'; '\u{1dd}'
378 'A', // 'Ǟ'; '\u{1de}'
379 'a', // 'ǟ'; '\u{1df}'
380 'A', // 'Ǡ'; '\u{1e0}'
381 'a', // 'ǡ'; '\u{1e1}'
382 'Æ', // 'Ǣ'; '\u{1e2}'
383 'æ', // 'ǣ'; '\u{1e3}'
384 'G', // 'Ǥ'; '\u{1e4}'
385 'g', // 'ǥ'; '\u{1e5}'
386 'G', // 'Ǧ'; '\u{1e6}'
387 'g', // 'ǧ'; '\u{1e7}'
388 'K', // 'Ǩ'; '\u{1e8}'
389 'k', // 'ǩ'; '\u{1e9}'
390 'O', // 'Ǫ'; '\u{1ea}'
391 'o', // 'ǫ'; '\u{1eb}'
392 'O', // 'Ǭ'; '\u{1ec}'
393 'o', // 'ǭ'; '\u{1ed}'
394 'Ǯ', // 'Ǯ'; '\u{1ee}'
395 'ǯ', // 'ǯ'; '\u{1ef}'
396 'j', // 'ǰ'; '\u{1f0}'
397 'DZ', // 'DZ'; '\u{1f1}'
398 'Dz', // 'Dz'; '\u{1f2}'
399 'dz', // 'dz'; '\u{1f3}'
400 'G', // 'Ǵ'; '\u{1f4}'
401 'g', // 'ǵ'; '\u{1f5}'
402 'Ƕ', // 'Ƕ'; '\u{1f6}'
403 'Ƿ', // 'Ƿ'; '\u{1f7}'
404 'N', // 'Ǹ'; '\u{1f8}'
405 'n', // 'ǹ'; '\u{1f9}'
406 'A', // 'Ǻ'; '\u{1fa}'
407 'a', // 'ǻ'; '\u{1fb}'
408 'Æ', // 'Ǽ'; '\u{1fc}'
409 'æ', // 'ǽ'; '\u{1fd}'
410 'O', // 'Ǿ'; '\u{1fe}'
411 'o', // 'ǿ'; '\u{1ff}'
412 'A', // 'Ȁ'; '\u{200}'
413 'a', // 'ȁ'; '\u{201}'
414 'A', // 'Ȃ'; '\u{202}'
415 'a', // 'ȃ'; '\u{203}'
416 'E', // 'Ȅ'; '\u{204}'
417 'e', // 'ȅ'; '\u{205}'
418 'E', // 'Ȇ'; '\u{206}'
419 'e', // 'ȇ'; '\u{207}'
420 'I', // 'Ȉ'; '\u{208}'
421 'i', // 'ȉ'; '\u{209}'
422 'I', // 'Ȋ'; '\u{20a}'
423 'i', // 'ȋ'; '\u{20b}'
424 'O', // 'Ȍ'; '\u{20c}'
425 'o', // 'ȍ'; '\u{20d}'
426 'O', // 'Ȏ'; '\u{20e}'
427 'o', // 'ȏ'; '\u{20f}'
428 'R', // 'Ȑ'; '\u{210}'
429 'r', // 'ȑ'; '\u{211}'
430 'R', // 'Ȓ'; '\u{212}'
431 'r', // 'ȓ'; '\u{213}'
432 'U', // 'Ȕ'; '\u{214}'
433 'u', // 'ȕ'; '\u{215}'
434 'U', // 'Ȗ'; '\u{216}'
435 'u', // 'ȗ'; '\u{217}'
436 'S', // 'Ș'; '\u{218}'
437 's', // 'ș'; '\u{219}'
438 'T', // 'Ț'; '\u{21a}'
439 't', // 'ț'; '\u{21b}'
440 'Ȝ', // 'Ȝ'; '\u{21c}'
441 'ȝ', // 'ȝ'; '\u{21d}'
442 'H', // 'Ȟ'; '\u{21e}'
443 'h', // 'ȟ'; '\u{21f}'
444 'N', // 'Ƞ'; '\u{220}'
445 'd', // 'ȡ'; '\u{221}'
446 'Ȣ', // 'Ȣ'; '\u{222}'
447 'ȣ', // 'ȣ'; '\u{223}'
448 'Z', // 'Ȥ'; '\u{224}'
449 'z', // 'ȥ'; '\u{225}'
450 'A', // 'Ȧ'; '\u{226}'
451 'a', // 'ȧ'; '\u{227}'
452 'E', // 'Ȩ'; '\u{228}'
453 'e', // 'ȩ'; '\u{229}'
454 'O', // 'Ȫ'; '\u{22a}'
455 'o', // 'ȫ'; '\u{22b}'
456 'O', // 'Ȭ'; '\u{22c}'
457 'o', // 'ȭ'; '\u{22d}'
458 'O', // 'Ȯ'; '\u{22e}'
459 'o', // 'ȯ'; '\u{22f}'
460 'O', // 'Ȱ'; '\u{230}'
461 'o', // 'ȱ'; '\u{231}'
462 'Y', // 'Ȳ'; '\u{232}'
463 'y', // 'ȳ'; '\u{233}'
464 'l', // 'ȴ'; '\u{234}'
465 'n', // 'ȵ'; '\u{235}'
466 't', // 'ȶ'; '\u{236}'
467 'j', // 'ȷ'; '\u{237}'
468 'ȸ', // 'ȸ'; '\u{238}'
469 'ȹ', // 'ȹ'; '\u{239}'
470 'A', // 'Ⱥ'; '\u{23a}'
471 'C', // 'Ȼ'; '\u{23b}'
472 'c', // 'ȼ'; '\u{23c}'
473 'L', // 'Ƚ'; '\u{23d}'
474 'T', // 'Ⱦ'; '\u{23e}'
475 's', // 'ȿ'; '\u{23f}'
476 'z', // 'ɀ'; '\u{240}'
477 'Ɂ', // 'Ɂ'; '\u{241}'
478 'ɂ', // 'ɂ'; '\u{242}'
479 'B', // 'Ƀ'; '\u{243}'
480 'U', // 'Ʉ'; '\u{244}'
481 'V', // 'Ʌ'; '\u{245}'
482 'E', // 'Ɇ'; '\u{246}'
483 'e', // 'ɇ'; '\u{247}'
484 'J', // 'Ɉ'; '\u{248}'
485 'j', // 'ɉ'; '\u{249}'
486 'Q', // 'Ɋ'; '\u{24a}'
487 'q', // 'ɋ'; '\u{24b}'
488 'R', // 'Ɍ'; '\u{24c}'
489 'r', // 'ɍ'; '\u{24d}'
490 'Y', // 'Ɏ'; '\u{24e}'
491 'y', // 'ɏ'; '\u{24f}'
492 'a', // 'ɐ'; '\u{250}'
493 'a', // 'ɑ'; '\u{251}'
494 'a', // 'ɒ'; '\u{252}'
495 'b', // 'ɓ'; '\u{253}'
496 'c', // 'ɔ'; '\u{254}'
497 'c', // 'ɕ'; '\u{255}'
498 'd', // 'ɖ'; '\u{256}'
499 'd', // 'ɗ'; '\u{257}'
500 'e', // 'ɘ'; '\u{258}'
501 'e', // 'ə'; '\u{259}'
502 'e', // 'ɚ'; '\u{25a}'
503 'e', // 'ɛ'; '\u{25b}'
504 'e', // 'ɜ'; '\u{25c}'
505 'e', // 'ɝ'; '\u{25d}'
506 'e', // 'ɞ'; '\u{25e}'
507 'j', // 'ɟ'; '\u{25f}'
508 'g', // 'ɠ'; '\u{260}'
509 'g', // 'ɡ'; '\u{261}'
510 'G', // 'ɢ'; '\u{262}'
511 'g', // 'ɣ'; '\u{263}'
512 'u', // 'ɤ'; '\u{264}'
513 'h', // 'ɥ'; '\u{265}'
514 'h', // 'ɦ'; '\u{266}'
515 'h', // 'ɧ'; '\u{267}'
516 'i', // 'ɨ'; '\u{268}'
517 'i', // 'ɩ'; '\u{269}'
518 'I', // 'ɪ'; '\u{26a}'
519 'l', // 'ɫ'; '\u{26b}'
520 'l', // 'ɬ'; '\u{26c}'
521 'l', // 'ɭ'; '\u{26d}'
522 'ɮ', // 'ɮ'; '\u{26e}'
523 'm', // 'ɯ'; '\u{26f}'
524 'm', // 'ɰ'; '\u{270}'
525 'm', // 'ɱ'; '\u{271}'
526 'n', // 'ɲ'; '\u{272}'
527 'n', // 'ɳ'; '\u{273}'
528 'N', // 'ɴ'; '\u{274}'
529 'o', // 'ɵ'; '\u{275}'
530 'ɶ', // 'ɶ'; '\u{276}'
531 'ɷ', // 'ɷ'; '\u{277}'
532 'ɸ', // 'ɸ'; '\u{278}'
533 'r', // 'ɹ'; '\u{279}'
534 'r', // 'ɺ'; '\u{27a}'
535 'r', // 'ɻ'; '\u{27b}'
536 'r', // 'ɼ'; '\u{27c}'
537 'r', // 'ɽ'; '\u{27d}'
538 'r', // 'ɾ'; '\u{27e}'
539 'r', // 'ɿ'; '\u{27f}'
540 'R', // 'ʀ'; '\u{280}'
541 'R', // 'ʁ'; '\u{281}'
542 's', // 'ʂ'; '\u{282}'
543 'ʃ', // 'ʃ'; '\u{283}'
544 'ʄ', // 'ʄ'; '\u{284}'
545 'ʅ', // 'ʅ'; '\u{285}'
546 'ʆ', // 'ʆ'; '\u{286}'
547 't', // 'ʇ'; '\u{287}'
548 't', // 'ʈ'; '\u{288}'
549 'u', // 'ʉ'; '\u{289}'
550 'ʊ', // 'ʊ'; '\u{28a}'
551 'v', // 'ʋ'; '\u{28b}'
552 'v', // 'ʌ'; '\u{28c}'
553 'w', // 'ʍ'; '\u{28d}'
554 'y', // 'ʎ'; '\u{28e}'
555 'Y', // 'ʏ'; '\u{28f}'
556 'z', // 'ʐ'; '\u{290}'
557 'z', // 'ʑ'; '\u{291}'
558 'ʒ', // 'ʒ'; '\u{292}'
559 'ʓ', // 'ʓ'; '\u{293}'
560 'ʔ', // 'ʔ'; '\u{294}'
561 'ʕ', // 'ʕ'; '\u{295}'
562 'ʖ', // 'ʖ'; '\u{296}'
563 'c', // 'ʗ'; '\u{297}'
564 'ʘ', // 'ʘ'; '\u{298}'
565 'B', // 'ʙ'; '\u{299}'
566 'e', // 'ʚ'; '\u{29a}'
567 'G', // 'ʛ'; '\u{29b}'
568 'H', // 'ʜ'; '\u{29c}'
569 'j', // 'ʝ'; '\u{29d}'
570 'k', // 'ʞ'; '\u{29e}'
571 'L', // 'ʟ'; '\u{29f}'
572];
573
574/// A char array corresponding to the following Unicode block:
575///
576/// - [Latin Extended Additional](https://en.wikipedia.org/wiki/Latin_Extended_Additional)
577///
578/// This covers the range `'\u{1e00}'..='\u{1eff}'`.
579static LATIN_EXTENDED_ADDITIONAL: [char; 256] = [
580 'A', // 'Ḁ'; '\u{1e00}'
581 'a', // 'ḁ'; '\u{1e01}'
582 'B', // 'Ḃ'; '\u{1e02}'
583 'b', // 'ḃ'; '\u{1e03}'
584 'B', // 'Ḅ'; '\u{1e04}'
585 'b', // 'ḅ'; '\u{1e05}'
586 'B', // 'Ḇ'; '\u{1e06}'
587 'b', // 'ḇ'; '\u{1e07}'
588 'C', // 'Ḉ'; '\u{1e08}'
589 'c', // 'ḉ'; '\u{1e09}'
590 'D', // 'Ḋ'; '\u{1e0a}'
591 'e', // 'ḋ'; '\u{1e0b}'
592 'D', // 'Ḍ'; '\u{1e0c}'
593 'd', // 'ḍ'; '\u{1e0d}'
594 'D', // 'Ḏ'; '\u{1e0e}'
595 'd', // 'ḏ'; '\u{1e0f}'
596 'D', // 'Ḑ'; '\u{1e10}'
597 'd', // 'ḑ'; '\u{1e11}'
598 'D', // 'Ḓ'; '\u{1e12}'
599 'd', // 'ḓ'; '\u{1e13}'
600 'E', // 'Ḕ'; '\u{1e14}'
601 'e', // 'ḕ'; '\u{1e15}'
602 'E', // 'Ḗ'; '\u{1e16}'
603 'e', // 'ḗ'; '\u{1e17}'
604 'E', // 'Ḙ'; '\u{1e18}'
605 'e', // 'ḙ'; '\u{1e19}'
606 'E', // 'Ḛ'; '\u{1e1a}'
607 'e', // 'ḛ'; '\u{1e1b}'
608 'E', // 'Ḝ'; '\u{1e1c}'
609 'e', // 'ḝ'; '\u{1e1d}'
610 'F', // 'Ḟ'; '\u{1e1e}'
611 'f', // 'ḟ'; '\u{1e1f}'
612 'G', // 'Ḡ'; '\u{1e20}'
613 'g', // 'ḡ'; '\u{1e21}'
614 'H', // 'Ḣ'; '\u{1e22}'
615 'g', // 'ḣ'; '\u{1e23}'
616 'H', // 'Ḥ'; '\u{1e24}'
617 'g', // 'ḥ'; '\u{1e25}'
618 'H', // 'Ḧ'; '\u{1e26}'
619 'g', // 'ḧ'; '\u{1e27}'
620 'H', // 'Ḩ'; '\u{1e28}'
621 'g', // 'ḩ'; '\u{1e29}'
622 'H', // 'Ḫ'; '\u{1e2a}'
623 'h', // 'ḫ'; '\u{1e2b}'
624 'I', // 'Ḭ'; '\u{1e2c}'
625 'i', // 'ḭ'; '\u{1e2d}'
626 'I', // 'Ḯ'; '\u{1e2e}'
627 'i', // 'ḯ'; '\u{1e2f}'
628 'K', // 'Ḱ'; '\u{1e30}'
629 'k', // 'ḱ'; '\u{1e31}'
630 'K', // 'Ḳ'; '\u{1e32}'
631 'k', // 'ḳ'; '\u{1e33}'
632 'K', // 'Ḵ'; '\u{1e34}'
633 'k', // 'ḵ'; '\u{1e35}'
634 'L', // 'Ḷ'; '\u{1e36}'
635 'l', // 'ḷ'; '\u{1e37}'
636 'L', // 'Ḹ'; '\u{1e38}'
637 'l', // 'ḹ'; '\u{1e39}'
638 'L', // 'Ḻ'; '\u{1e3a}'
639 'l', // 'ḻ'; '\u{1e3b}'
640 'L', // 'Ḽ'; '\u{1e3c}'
641 'l', // 'ḽ'; '\u{1e3d}'
642 'M', // 'Ḿ'; '\u{1e3e}'
643 'm', // 'ḿ'; '\u{1e3f}'
644 'M', // 'Ṁ'; '\u{1e40}'
645 'm', // 'ṁ'; '\u{1e41}'
646 'M', // 'Ṃ'; '\u{1e42}'
647 'm', // 'ṃ'; '\u{1e43}'
648 'N', // 'Ṅ'; '\u{1e44}'
649 'n', // 'ṅ'; '\u{1e45}'
650 'N', // 'Ṇ'; '\u{1e46}'
651 'n', // 'ṇ'; '\u{1e47}'
652 'N', // 'Ṉ'; '\u{1e48}'
653 'n', // 'ṉ'; '\u{1e49}'
654 'N', // 'Ṋ'; '\u{1e4a}'
655 'n', // 'ṋ'; '\u{1e4b}'
656 'O', // 'Ṍ'; '\u{1e4c}'
657 'o', // 'ṍ'; '\u{1e4d}'
658 'O', // 'Ṏ'; '\u{1e4e}'
659 'o', // 'ṏ'; '\u{1e4f}'
660 'O', // 'Ṑ'; '\u{1e50}'
661 'o', // 'ṑ'; '\u{1e51}'
662 'O', // 'Ṓ'; '\u{1e52}'
663 'o', // 'ṓ'; '\u{1e53}'
664 'P', // 'Ṕ'; '\u{1e54}'
665 'p', // 'ṕ'; '\u{1e55}'
666 'P', // 'Ṗ'; '\u{1e56}'
667 'p', // 'ṗ'; '\u{1e57}'
668 'R', // 'Ṙ'; '\u{1e58}'
669 'r', // 'ṙ'; '\u{1e59}'
670 'R', // 'Ṛ'; '\u{1e5a}'
671 'r', // 'ṛ'; '\u{1e5b}'
672 'R', // 'Ṝ'; '\u{1e5c}'
673 'r', // 'ṝ'; '\u{1e5d}'
674 'R', // 'Ṟ'; '\u{1e5e}'
675 'r', // 'ṟ'; '\u{1e5f}'
676 'S', // 'Ṡ'; '\u{1e60}'
677 's', // 'ṡ'; '\u{1e61}'
678 'S', // 'Ṣ'; '\u{1e62}'
679 's', // 'ṣ'; '\u{1e63}'
680 'S', // 'Ṥ'; '\u{1e64}'
681 's', // 'ṥ'; '\u{1e65}'
682 'S', // 'Ṧ'; '\u{1e66}'
683 's', // 'ṧ'; '\u{1e67}'
684 'S', // 'Ṩ'; '\u{1e68}'
685 's', // 'ṩ'; '\u{1e69}'
686 'T', // 'Ṫ'; '\u{1e6a}'
687 't', // 'ṫ'; '\u{1e6b}'
688 'T', // 'Ṭ'; '\u{1e6c}'
689 't', // 'ṭ'; '\u{1e6d}'
690 'T', // 'Ṯ'; '\u{1e6e}'
691 't', // 'ṯ'; '\u{1e6f}'
692 'T', // 'Ṱ'; '\u{1e70}'
693 't', // 'ṱ'; '\u{1e71}'
694 'U', // 'Ṳ'; '\u{1e72}'
695 'u', // 'ṳ'; '\u{1e73}'
696 'U', // 'Ṵ'; '\u{1e74}'
697 'u', // 'ṵ'; '\u{1e75}'
698 'U', // 'Ṷ'; '\u{1e76}'
699 'u', // 'ṷ'; '\u{1e77}'
700 'U', // 'Ṹ'; '\u{1e78}'
701 'u', // 'ṹ'; '\u{1e79}'
702 'U', // 'Ṻ'; '\u{1e7a}'
703 'u', // 'ṻ'; '\u{1e7b}'
704 'V', // 'Ṽ'; '\u{1e7c}'
705 'v', // 'ṽ'; '\u{1e7d}'
706 'V', // 'Ṿ'; '\u{1e7e}'
707 'v', // 'ṿ'; '\u{1e7f}'
708 'W', // 'Ẁ'; '\u{1e80}'
709 'w', // 'ẁ'; '\u{1e81}'
710 'W', // 'Ẃ'; '\u{1e82}'
711 'w', // 'ẃ'; '\u{1e83}'
712 'W', // 'Ẅ'; '\u{1e84}'
713 'w', // 'ẅ'; '\u{1e85}'
714 'W', // 'Ẇ'; '\u{1e86}'
715 'w', // 'ẇ'; '\u{1e87}'
716 'W', // 'Ẉ'; '\u{1e88}'
717 'j', // 'ẉ'; '\u{1e89}'
718 'X', // 'Ẋ'; '\u{1e8a}'
719 'x', // 'ẋ'; '\u{1e8b}'
720 'X', // 'Ẍ'; '\u{1e8c}'
721 'x', // 'ẍ'; '\u{1e8d}'
722 'Y', // 'Ẏ'; '\u{1e8e}'
723 'y', // 'ẏ'; '\u{1e8f}'
724 'Z', // 'Ẑ'; '\u{1e90}'
725 'z', // 'ẑ'; '\u{1e91}'
726 'Z', // 'Ẓ'; '\u{1e92}'
727 'z', // 'ẓ'; '\u{1e93}'
728 'Z', // 'Ẕ'; '\u{1e94}'
729 'z', // 'ẕ'; '\u{1e95}'
730 'h', // 'ẖ'; '\u{1e96}'
731 't', // 'ẗ'; '\u{1e97}'
732 'w', // 'ẘ'; '\u{1e98}'
733 'y', // 'ẙ'; '\u{1e99}'
734 'a', // 'ẚ'; '\u{1e9a}'
735 'i', // 'ẛ'; '\u{1e9b}'
736 'f', // 'ẜ'; '\u{1e9c}'
737 'f', // 'ẝ'; '\u{1e9d}'
738 'ẞ', // 'ẞ'; '\u{1e9e}'
739 'ẟ', // 'ẟ'; '\u{1e9f}'
740 'A', // 'Ạ'; '\u{1ea0}'
741 'a', // 'ạ'; '\u{1ea1}'
742 'A', // 'Ả'; '\u{1ea2}'
743 'a', // 'ả'; '\u{1ea3}'
744 'A', // 'Ấ'; '\u{1ea4}'
745 'a', // 'ấ'; '\u{1ea5}'
746 'A', // 'Ầ'; '\u{1ea6}'
747 'a', // 'ầ'; '\u{1ea7}'
748 'A', // 'Ẩ'; '\u{1ea8}'
749 'a', // 'ẩ'; '\u{1ea9}'
750 'A', // 'Ẫ'; '\u{1eaa}'
751 'a', // 'ẫ'; '\u{1eab}'
752 'A', // 'Ậ'; '\u{1eac}'
753 'a', // 'ậ'; '\u{1ead}'
754 'A', // 'Ắ'; '\u{1eae}'
755 'a', // 'ắ'; '\u{1eaf}'
756 'A', // 'Ằ'; '\u{1eb0}'
757 'a', // 'ằ'; '\u{1eb1}'
758 'A', // 'Ẳ'; '\u{1eb2}'
759 'a', // 'ẳ'; '\u{1eb3}'
760 'A', // 'Ẵ'; '\u{1eb4}'
761 'a', // 'ẵ'; '\u{1eb5}'
762 'A', // 'Ặ'; '\u{1eb6}'
763 'a', // 'ặ'; '\u{1eb7}'
764 'E', // 'Ẹ'; '\u{1eb8}'
765 'e', // 'ẹ'; '\u{1eb9}'
766 'E', // 'Ẻ'; '\u{1eba}'
767 'e', // 'ẻ'; '\u{1ebb}'
768 'E', // 'Ẽ'; '\u{1ebc}'
769 'e', // 'ẽ'; '\u{1ebd}'
770 'E', // 'Ế'; '\u{1ebe}'
771 'e', // 'ế'; '\u{1ebf}'
772 'E', // 'Ề'; '\u{1ec0}'
773 'e', // 'ề'; '\u{1ec1}'
774 'E', // 'Ể'; '\u{1ec2}'
775 'e', // 'ể'; '\u{1ec3}'
776 'E', // 'Ễ'; '\u{1ec4}'
777 'e', // 'ễ'; '\u{1ec5}'
778 'E', // 'Ệ'; '\u{1ec6}'
779 'e', // 'ệ'; '\u{1ec7}'
780 'I', // 'Ỉ'; '\u{1ec8}'
781 'i', // 'ỉ'; '\u{1ec9}'
782 'I', // 'Ị'; '\u{1eca}'
783 'i', // 'ị'; '\u{1ecb}'
784 'O', // 'Ọ'; '\u{1ecc}'
785 'o', // 'ọ'; '\u{1ecd}'
786 'O', // 'Ỏ'; '\u{1ece}'
787 'o', // 'ỏ'; '\u{1ecf}'
788 'O', // 'Ố'; '\u{1ed0}'
789 'o', // 'ố'; '\u{1ed1}'
790 'O', // 'Ồ'; '\u{1ed2}'
791 'o', // 'ồ'; '\u{1ed3}'
792 'O', // 'Ổ'; '\u{1ed4}'
793 'o', // 'ổ'; '\u{1ed5}'
794 'O', // 'Ỗ'; '\u{1ed6}'
795 'o', // 'ỗ'; '\u{1ed7}'
796 'O', // 'Ộ'; '\u{1ed8}'
797 'o', // 'ộ'; '\u{1ed9}'
798 'O', // 'Ớ'; '\u{1eda}'
799 'o', // 'ớ'; '\u{1edb}'
800 'O', // 'Ờ'; '\u{1edc}'
801 'o', // 'ờ'; '\u{1edd}'
802 'O', // 'Ở'; '\u{1ede}'
803 'o', // 'ở'; '\u{1edf}'
804 'O', // 'Ỡ'; '\u{1ee0}'
805 'o', // 'ỡ'; '\u{1ee1}'
806 'O', // 'Ợ'; '\u{1ee2}'
807 'o', // 'ợ'; '\u{1ee3}'
808 'U', // 'Ụ'; '\u{1ee4}'
809 'u', // 'ụ'; '\u{1ee5}'
810 'U', // 'Ủ'; '\u{1ee6}'
811 'u', // 'ủ'; '\u{1ee7}'
812 'U', // 'Ứ'; '\u{1ee8}'
813 'u', // 'ứ'; '\u{1ee9}'
814 'U', // 'Ừ'; '\u{1eea}'
815 'u', // 'ừ'; '\u{1eeb}'
816 'U', // 'Ử'; '\u{1eec}'
817 'u', // 'ử'; '\u{1eed}'
818 'U', // 'Ữ'; '\u{1eee}'
819 'u', // 'ữ'; '\u{1eef}'
820 'U', // 'Ự'; '\u{1ef0}'
821 'u', // 'ự'; '\u{1ef1}'
822 'Y', // 'Ỳ'; '\u{1ef2}'
823 'y', // 'ỳ'; '\u{1ef3}'
824 'Y', // 'Ỵ'; '\u{1ef4}'
825 'y', // 'ỵ'; '\u{1ef5}'
826 'Y', // 'Ỷ'; '\u{1ef6}'
827 'y', // 'ỷ'; '\u{1ef7}'
828 'Y', // 'Ỹ'; '\u{1ef8}'
829 'y', // 'ỹ'; '\u{1ef9}'
830 'Ỻ', // 'Ỻ'; '\u{1efa}'
831 'ỻ', // 'ỻ'; '\u{1efb}'
832 'Ỽ', // 'Ỽ'; '\u{1efc}'
833 'ỽ', // 'ỽ'; '\u{1efd}'
834 'Ỿ', // 'Ỿ'; '\u{1efe}'
835 'ỿ', // 'ỿ'; '\u{1eff}'
836];
837
838/// A char array corresponding to the following Unicode block:
839///
840/// - [Superscripts and Subscripts](https://en.wikipedia.org/wiki/Superscripts_and_Subscripts)
841///
842/// This covers the range `'\u{2070}'..='\u{209f}'`.
843static SUPERSCRIPTS_AND_SUBSCRIPTS: [char; 48] = [
844 '0', // '⁰'; '\u{2070}'
845 'i', // 'ⁱ'; '\u{2071}'
846 '', // ''; '\u{2072}'
847 '', // ''; '\u{2073}'
848 '4', // '⁴'; '\u{2074}'
849 '5', // '⁵'; '\u{2075}'
850 '6', // '⁶'; '\u{2076}'
851 '7', // '⁷'; '\u{2077}'
852 '8', // '⁸'; '\u{2078}'
853 '0', // '⁹'; '\u{2079}'
854 '+', // '⁺'; '\u{207a}'
855 '-', // '⁻'; '\u{207b}'
856 '=', // '⁼'; '\u{207c}'
857 '(', // '⁽'; '\u{207d}'
858 ')', // '⁾'; '\u{207e}'
859 'n', // 'ⁿ'; '\u{207f}'
860 '0', // '₀'; '\u{2080}'
861 '1', // '₁'; '\u{2081}'
862 '2', // '₂'; '\u{2082}'
863 '3', // '₃'; '\u{2083}'
864 '4', // '₄'; '\u{2084}'
865 '5', // '₅'; '\u{2085}'
866 '6', // '₆'; '\u{2086}'
867 '7', // '₇'; '\u{2087}'
868 '8', // '₈'; '\u{2088}'
869 '9', // '₉'; '\u{2089}'
870 '+', // '₊'; '\u{208a}'
871 '-', // '₋'; '\u{208b}'
872 '=', // '₌'; '\u{208c}'
873 '(', // '₍'; '\u{208d}'
874 ')', // '₎'; '\u{208e}'
875 '', // ''; '\u{208f}'
876 'a', // 'ₐ'; '\u{2090}'
877 'e', // 'ₑ'; '\u{2091}'
878 'o', // 'ₒ'; '\u{2092}'
879 'x', // 'ₓ'; '\u{2093}'
880 'e', // 'ₔ'; '\u{2094}'
881 'h', // 'ₕ'; '\u{2095}'
882 'k', // 'ₖ'; '\u{2096}'
883 'l', // 'ₗ'; '\u{2097}'
884 'm', // 'ₘ'; '\u{2098}'
885 'n', // 'ₙ'; '\u{2099}'
886 'p', // 'ₚ'; '\u{209a}'
887 's', // 'ₛ'; '\u{209b}'
888 't', // 'ₜ'; '\u{209c}'
889 '', // ''; '\u{209d}'
890 '', // ''; '\u{209e}'
891 '', // ''; '\u{209f}'
892];
893
894#[cfg(test)]
895mod tests {
896 use super::*;
897
898 /// Helper function for test assertions.
899 fn check_conversions(pairs: &[(char, char)]) {
900 for (original, normalized) in pairs {
901 assert_eq!(normalize(*original), *normalized);
902 }
903 }
904
905 /// General conversion checks
906 #[test]
907 fn general() {
908 check_conversions(&[
909 ('ą', 'a'),
910 ('À', 'A'),
911 ('ć', 'c'),
912 ('ę', 'e'),
913 ('ł', 'l'),
914 ('ń', 'n'),
915 ('ó', 'o'),
916 ('ś', 's'),
917 ('ź', 'z'),
918 ('ż', 'z'),
919 ('Ą', 'A'),
920 ('Ć', 'C'),
921 ('Ę', 'E'),
922 ('ł', 'l'),
923 ('Ł', 'L'),
924 ('Ń', 'N'),
925 ('Ó', 'O'),
926 ('Ś', 'S'),
927 ('Ź', 'Z'),
928 ('Ż', 'Z'),
929 ('¡', '!'),
930 ]);
931 }
932
933 /// Some checks for characters which are not visible.
934 #[test]
935 fn invisible_chars() {
936 check_conversions(&[('\u{a0}', '\u{a0}'), ('\u{ad}', '\u{ad}')]);
937 }
938
939 /// Check boundary cases in case ranges are modified.
940 #[test]
941 fn boundary_cases() {
942 check_conversions(&[
943 ('\u{9f}', '\u{9f}'),
944 ('\u{a0}', '\u{a0}'),
945 ('¡', '!'),
946 ('ʟ', 'L'),
947 ('\u{2a0}', '\u{2a0}'),
948 ('\u{1dff}', '\u{1dff}'),
949 ('Ḁ', 'A'),
950 ('ỹ', 'y'),
951 ('\u{1eff}', '\u{1eff}'),
952 ('\u{1f00}', '\u{1f00}'),
953 ('⁰', '0'),
954 ('\u{209c}', 't'),
955 ('\u{209f}', '\u{209f}'),
956 ('\u{20a0}', '\u{20a0}'),
957 ]);
958 }
959
960 /// Check that conversions outside the blocks are unchanged.
961 #[test]
962 fn unchanged_outside_blocks() {
963 check_conversions(&[
964 ('a', 'a'),
965 ('⟁', '⟁'),
966 ('┍', '┍'),
967 ('ω', 'ω'),
968 ('⁕', '⁕'),
969 ('ה', 'ה'),
970 ]);
971 }
972}