1use crate::{DecodeError, Decoder, EncodeError, Encoder};
2
3pub const ISO_8859_1_NAME: &str = "ISO_8859-1:1987";
5
6pub struct ISO8859_1Encoder;
8impl Encoder for ISO8859_1Encoder {
9 fn name(&self) -> &'static str {
10 ISO_8859_1_NAME
11 }
12
13 fn encode(
14 &mut self,
15 src: &str,
16 dst: &mut [u8],
17 finish: bool,
18 ) -> Result<(usize, usize), EncodeError> {
19 if src.is_empty() {
20 return if finish {
21 Ok((0, 0))
22 } else {
23 Err(EncodeError::InputIsEmpty)
24 };
25 }
26
27 if dst.is_empty() {
28 return Err(EncodeError::OutputTooShort);
29 }
30
31 let (mut read, mut write) = (0, 0);
32 for c in src.chars() {
33 let b = c as u32;
34 read += c.len_utf8();
35 if b >= 256 {
36 return Err(EncodeError::Unmappable { read, write, c });
37 }
38 dst[write] = b as u8;
39 write += 1;
40 if write == dst.len() {
41 break;
42 }
43 }
44 Ok((read, write))
45 }
46}
47
48pub struct ISO8859_1Decoder;
50impl Decoder for ISO8859_1Decoder {
51 fn name(&self) -> &'static str {
52 ISO_8859_1_NAME
53 }
54
55 fn decode(
56 &mut self,
57 src: &[u8],
58 dst: &mut String,
59 finish: bool,
60 ) -> Result<(usize, usize), DecodeError> {
61 if src.is_empty() {
62 return if finish {
63 Ok((0, 0))
64 } else {
65 Err(DecodeError::InputIsEmpty)
66 };
67 }
68 let len = dst.capacity() - dst.len();
69 if len < 4 {
70 return Err(DecodeError::OutputTooShort);
71 }
72
73 let (mut read, mut write) = (0, 0);
74 for &b in src {
75 let c = b as char;
76 let l = c.len_utf8();
77 if write + l > len {
78 break;
79 }
80 dst.push(c);
81 read += 1;
82 write += l;
83 }
84 Ok((read, write))
85 }
86}
87
88const ISO_8859_2_TO_UNICODE: [char; 128] = [
92 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
93 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
94 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
95 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{104}', '\u{2d8}', '\u{141}',
96 '\u{a4}', '\u{13d}', '\u{15a}', '\u{a7}', '\u{a8}', '\u{160}', '\u{15e}', '\u{164}', '\u{179}',
97 '\u{ad}', '\u{17d}', '\u{17b}', '\u{b0}', '\u{105}', '\u{2db}', '\u{142}', '\u{b4}', '\u{13e}',
98 '\u{15b}', '\u{2c7}', '\u{b8}', '\u{161}', '\u{15f}', '\u{165}', '\u{17a}', '\u{2dd}',
99 '\u{17e}', '\u{17c}', '\u{154}', '\u{c1}', '\u{c2}', '\u{102}', '\u{c4}', '\u{139}', '\u{106}',
100 '\u{c7}', '\u{10c}', '\u{c9}', '\u{118}', '\u{cb}', '\u{11a}', '\u{cd}', '\u{ce}', '\u{10e}',
101 '\u{110}', '\u{143}', '\u{147}', '\u{d3}', '\u{d4}', '\u{150}', '\u{d6}', '\u{d7}', '\u{158}',
102 '\u{16e}', '\u{da}', '\u{170}', '\u{dc}', '\u{dd}', '\u{162}', '\u{df}', '\u{155}', '\u{e1}',
103 '\u{e2}', '\u{103}', '\u{e4}', '\u{13a}', '\u{107}', '\u{e7}', '\u{10d}', '\u{e9}', '\u{119}',
104 '\u{eb}', '\u{11b}', '\u{ed}', '\u{ee}', '\u{10f}', '\u{111}', '\u{144}', '\u{148}', '\u{f3}',
105 '\u{f4}', '\u{151}', '\u{f6}', '\u{f7}', '\u{159}', '\u{16f}', '\u{fa}', '\u{171}', '\u{fc}',
106 '\u{fd}', '\u{163}', '\u{2d9}',
107];
108
109const UNICODE_TO_ISO_8859_2: &[(u16, u8)] = &[
110 (128, 128),
111 (129, 129),
112 (130, 130),
113 (131, 131),
114 (132, 132),
115 (133, 133),
116 (134, 134),
117 (135, 135),
118 (136, 136),
119 (137, 137),
120 (138, 138),
121 (139, 139),
122 (140, 140),
123 (141, 141),
124 (142, 142),
125 (143, 143),
126 (144, 144),
127 (145, 145),
128 (146, 146),
129 (147, 147),
130 (148, 148),
131 (149, 149),
132 (150, 150),
133 (151, 151),
134 (152, 152),
135 (153, 153),
136 (154, 154),
137 (155, 155),
138 (156, 156),
139 (157, 157),
140 (158, 158),
141 (159, 159),
142 (160, 160),
143 (164, 164),
144 (167, 167),
145 (168, 168),
146 (173, 173),
147 (176, 176),
148 (180, 180),
149 (184, 184),
150 (193, 193),
151 (194, 194),
152 (196, 196),
153 (199, 199),
154 (201, 201),
155 (203, 203),
156 (205, 205),
157 (206, 206),
158 (211, 211),
159 (212, 212),
160 (214, 214),
161 (215, 215),
162 (218, 218),
163 (220, 220),
164 (221, 221),
165 (223, 223),
166 (225, 225),
167 (226, 226),
168 (228, 228),
169 (231, 231),
170 (233, 233),
171 (235, 235),
172 (237, 237),
173 (238, 238),
174 (243, 243),
175 (244, 244),
176 (246, 246),
177 (247, 247),
178 (250, 250),
179 (252, 252),
180 (253, 253),
181 (258, 195),
182 (259, 227),
183 (260, 161),
184 (261, 177),
185 (262, 198),
186 (263, 230),
187 (268, 200),
188 (269, 232),
189 (270, 207),
190 (271, 239),
191 (272, 208),
192 (273, 240),
193 (280, 202),
194 (281, 234),
195 (282, 204),
196 (283, 236),
197 (313, 197),
198 (314, 229),
199 (317, 165),
200 (318, 181),
201 (321, 163),
202 (322, 179),
203 (323, 209),
204 (324, 241),
205 (327, 210),
206 (328, 242),
207 (336, 213),
208 (337, 245),
209 (340, 192),
210 (341, 224),
211 (344, 216),
212 (345, 248),
213 (346, 166),
214 (347, 182),
215 (350, 170),
216 (351, 186),
217 (352, 169),
218 (353, 185),
219 (354, 222),
220 (355, 254),
221 (356, 171),
222 (357, 187),
223 (366, 217),
224 (367, 249),
225 (368, 219),
226 (369, 251),
227 (377, 172),
228 (378, 188),
229 (379, 175),
230 (380, 191),
231 (381, 174),
232 (382, 190),
233 (711, 183),
234 (728, 162),
235 (729, 255),
236 (731, 178),
237 (733, 189),
238];
239
240const ISO_8859_3_TO_UNICODE: [char; 128] = [
241 '\u{80}',
242 '\u{81}',
243 '\u{82}',
244 '\u{83}',
245 '\u{84}',
246 '\u{85}',
247 '\u{86}',
248 '\u{87}',
249 '\u{88}',
250 '\u{89}',
251 '\u{8a}',
252 '\u{8b}',
253 '\u{8c}',
254 '\u{8d}',
255 '\u{8e}',
256 '\u{8f}',
257 '\u{90}',
258 '\u{91}',
259 '\u{92}',
260 '\u{93}',
261 '\u{94}',
262 '\u{95}',
263 '\u{96}',
264 '\u{97}',
265 '\u{98}',
266 '\u{99}',
267 '\u{9a}',
268 '\u{9b}',
269 '\u{9c}',
270 '\u{9d}',
271 '\u{9e}',
272 '\u{9f}',
273 '\u{a0}',
274 '\u{126}',
275 '\u{2d8}',
276 '\u{a3}',
277 '\u{a4}',
278 char::REPLACEMENT_CHARACTER,
279 '\u{124}',
280 '\u{a7}',
281 '\u{a8}',
282 '\u{130}',
283 '\u{15e}',
284 '\u{11e}',
285 '\u{134}',
286 '\u{ad}',
287 char::REPLACEMENT_CHARACTER,
288 '\u{17b}',
289 '\u{b0}',
290 '\u{127}',
291 '\u{b2}',
292 '\u{b3}',
293 '\u{b4}',
294 '\u{b5}',
295 '\u{125}',
296 '\u{b7}',
297 '\u{b8}',
298 '\u{131}',
299 '\u{15f}',
300 '\u{11f}',
301 '\u{135}',
302 '\u{bd}',
303 char::REPLACEMENT_CHARACTER,
304 '\u{17c}',
305 '\u{c0}',
306 '\u{c1}',
307 '\u{c2}',
308 char::REPLACEMENT_CHARACTER,
309 '\u{c4}',
310 '\u{10a}',
311 '\u{108}',
312 '\u{c7}',
313 '\u{c8}',
314 '\u{c9}',
315 '\u{ca}',
316 '\u{cb}',
317 '\u{cc}',
318 '\u{cd}',
319 '\u{ce}',
320 '\u{cf}',
321 char::REPLACEMENT_CHARACTER,
322 '\u{d1}',
323 '\u{d2}',
324 '\u{d3}',
325 '\u{d4}',
326 '\u{120}',
327 '\u{d6}',
328 '\u{d7}',
329 '\u{11c}',
330 '\u{d9}',
331 '\u{da}',
332 '\u{db}',
333 '\u{dc}',
334 '\u{16c}',
335 '\u{15c}',
336 '\u{df}',
337 '\u{e0}',
338 '\u{e1}',
339 '\u{e2}',
340 char::REPLACEMENT_CHARACTER,
341 '\u{e4}',
342 '\u{10b}',
343 '\u{109}',
344 '\u{e7}',
345 '\u{e8}',
346 '\u{e9}',
347 '\u{ea}',
348 '\u{eb}',
349 '\u{ec}',
350 '\u{ed}',
351 '\u{ee}',
352 '\u{ef}',
353 char::REPLACEMENT_CHARACTER,
354 '\u{f1}',
355 '\u{f2}',
356 '\u{f3}',
357 '\u{f4}',
358 '\u{121}',
359 '\u{f6}',
360 '\u{f7}',
361 '\u{11d}',
362 '\u{f9}',
363 '\u{fa}',
364 '\u{fb}',
365 '\u{fc}',
366 '\u{16d}',
367 '\u{15d}',
368 '\u{2d9}',
369];
370
371const UNICODE_TO_ISO_8859_3: &[(u16, u8)] = &[
372 (128, 128),
373 (129, 129),
374 (130, 130),
375 (131, 131),
376 (132, 132),
377 (133, 133),
378 (134, 134),
379 (135, 135),
380 (136, 136),
381 (137, 137),
382 (138, 138),
383 (139, 139),
384 (140, 140),
385 (141, 141),
386 (142, 142),
387 (143, 143),
388 (144, 144),
389 (145, 145),
390 (146, 146),
391 (147, 147),
392 (148, 148),
393 (149, 149),
394 (150, 150),
395 (151, 151),
396 (152, 152),
397 (153, 153),
398 (154, 154),
399 (155, 155),
400 (156, 156),
401 (157, 157),
402 (158, 158),
403 (159, 159),
404 (160, 160),
405 (163, 163),
406 (164, 164),
407 (167, 167),
408 (168, 168),
409 (173, 173),
410 (176, 176),
411 (178, 178),
412 (179, 179),
413 (180, 180),
414 (181, 181),
415 (183, 183),
416 (184, 184),
417 (189, 189),
418 (192, 192),
419 (193, 193),
420 (194, 194),
421 (196, 196),
422 (199, 199),
423 (200, 200),
424 (201, 201),
425 (202, 202),
426 (203, 203),
427 (204, 204),
428 (205, 205),
429 (206, 206),
430 (207, 207),
431 (209, 209),
432 (210, 210),
433 (211, 211),
434 (212, 212),
435 (214, 214),
436 (215, 215),
437 (217, 217),
438 (218, 218),
439 (219, 219),
440 (220, 220),
441 (223, 223),
442 (224, 224),
443 (225, 225),
444 (226, 226),
445 (228, 228),
446 (231, 231),
447 (232, 232),
448 (233, 233),
449 (234, 234),
450 (235, 235),
451 (236, 236),
452 (237, 237),
453 (238, 238),
454 (239, 239),
455 (241, 241),
456 (242, 242),
457 (243, 243),
458 (244, 244),
459 (246, 246),
460 (247, 247),
461 (249, 249),
462 (250, 250),
463 (251, 251),
464 (252, 252),
465 (264, 198),
466 (265, 230),
467 (266, 197),
468 (267, 229),
469 (284, 216),
470 (285, 248),
471 (286, 171),
472 (287, 187),
473 (288, 213),
474 (289, 245),
475 (292, 166),
476 (293, 182),
477 (294, 161),
478 (295, 177),
479 (304, 169),
480 (305, 185),
481 (308, 172),
482 (309, 188),
483 (348, 222),
484 (349, 254),
485 (350, 170),
486 (351, 186),
487 (364, 221),
488 (365, 253),
489 (379, 175),
490 (380, 191),
491 (728, 162),
492 (729, 255),
493];
494
495const ISO_8859_4_TO_UNICODE: [char; 128] = [
496 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
497 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
498 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
499 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{104}', '\u{138}', '\u{156}',
500 '\u{a4}', '\u{128}', '\u{13b}', '\u{a7}', '\u{a8}', '\u{160}', '\u{112}', '\u{122}', '\u{166}',
501 '\u{ad}', '\u{17d}', '\u{af}', '\u{b0}', '\u{105}', '\u{2db}', '\u{157}', '\u{b4}', '\u{129}',
502 '\u{13c}', '\u{2c7}', '\u{b8}', '\u{161}', '\u{113}', '\u{123}', '\u{167}', '\u{14a}',
503 '\u{17e}', '\u{14b}', '\u{100}', '\u{c1}', '\u{c2}', '\u{c3}', '\u{c4}', '\u{c5}', '\u{c6}',
504 '\u{12e}', '\u{10c}', '\u{c9}', '\u{118}', '\u{cb}', '\u{116}', '\u{cd}', '\u{ce}', '\u{12a}',
505 '\u{110}', '\u{145}', '\u{14c}', '\u{136}', '\u{d4}', '\u{d5}', '\u{d6}', '\u{d7}', '\u{d8}',
506 '\u{172}', '\u{da}', '\u{db}', '\u{dc}', '\u{168}', '\u{16a}', '\u{df}', '\u{101}', '\u{e1}',
507 '\u{e2}', '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{12f}', '\u{10d}', '\u{e9}', '\u{119}',
508 '\u{eb}', '\u{117}', '\u{ed}', '\u{ee}', '\u{12b}', '\u{111}', '\u{146}', '\u{14d}', '\u{137}',
509 '\u{f4}', '\u{f5}', '\u{f6}', '\u{f7}', '\u{f8}', '\u{173}', '\u{fa}', '\u{fb}', '\u{fc}',
510 '\u{169}', '\u{16b}', '\u{2d9}',
511];
512
513const UNICODE_TO_ISO_8859_4: &[(u16, u8)] = &[
514 (128, 128),
515 (129, 129),
516 (130, 130),
517 (131, 131),
518 (132, 132),
519 (133, 133),
520 (134, 134),
521 (135, 135),
522 (136, 136),
523 (137, 137),
524 (138, 138),
525 (139, 139),
526 (140, 140),
527 (141, 141),
528 (142, 142),
529 (143, 143),
530 (144, 144),
531 (145, 145),
532 (146, 146),
533 (147, 147),
534 (148, 148),
535 (149, 149),
536 (150, 150),
537 (151, 151),
538 (152, 152),
539 (153, 153),
540 (154, 154),
541 (155, 155),
542 (156, 156),
543 (157, 157),
544 (158, 158),
545 (159, 159),
546 (160, 160),
547 (164, 164),
548 (167, 167),
549 (168, 168),
550 (173, 173),
551 (175, 175),
552 (176, 176),
553 (180, 180),
554 (184, 184),
555 (193, 193),
556 (194, 194),
557 (195, 195),
558 (196, 196),
559 (197, 197),
560 (198, 198),
561 (201, 201),
562 (203, 203),
563 (205, 205),
564 (206, 206),
565 (212, 212),
566 (213, 213),
567 (214, 214),
568 (215, 215),
569 (216, 216),
570 (218, 218),
571 (219, 219),
572 (220, 220),
573 (223, 223),
574 (225, 225),
575 (226, 226),
576 (227, 227),
577 (228, 228),
578 (229, 229),
579 (230, 230),
580 (233, 233),
581 (235, 235),
582 (237, 237),
583 (238, 238),
584 (244, 244),
585 (245, 245),
586 (246, 246),
587 (247, 247),
588 (248, 248),
589 (250, 250),
590 (251, 251),
591 (252, 252),
592 (256, 192),
593 (257, 224),
594 (260, 161),
595 (261, 177),
596 (268, 200),
597 (269, 232),
598 (272, 208),
599 (273, 240),
600 (274, 170),
601 (275, 186),
602 (278, 204),
603 (279, 236),
604 (280, 202),
605 (281, 234),
606 (290, 171),
607 (291, 187),
608 (296, 165),
609 (297, 181),
610 (298, 207),
611 (299, 239),
612 (302, 199),
613 (303, 231),
614 (310, 211),
615 (311, 243),
616 (312, 162),
617 (315, 166),
618 (316, 182),
619 (325, 209),
620 (326, 241),
621 (330, 189),
622 (331, 191),
623 (332, 210),
624 (333, 242),
625 (342, 163),
626 (343, 179),
627 (352, 169),
628 (353, 185),
629 (358, 172),
630 (359, 188),
631 (360, 221),
632 (361, 253),
633 (362, 222),
634 (363, 254),
635 (370, 217),
636 (371, 249),
637 (381, 174),
638 (382, 190),
639 (711, 183),
640 (729, 255),
641 (731, 178),
642];
643
644const ISO_8859_5_TO_UNICODE: [char; 128] = [
645 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
646 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
647 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
648 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{401}', '\u{402}', '\u{403}',
649 '\u{404}', '\u{405}', '\u{406}', '\u{407}', '\u{408}', '\u{409}', '\u{40a}', '\u{40b}',
650 '\u{40c}', '\u{ad}', '\u{40e}', '\u{40f}', '\u{410}', '\u{411}', '\u{412}', '\u{413}',
651 '\u{414}', '\u{415}', '\u{416}', '\u{417}', '\u{418}', '\u{419}', '\u{41a}', '\u{41b}',
652 '\u{41c}', '\u{41d}', '\u{41e}', '\u{41f}', '\u{420}', '\u{421}', '\u{422}', '\u{423}',
653 '\u{424}', '\u{425}', '\u{426}', '\u{427}', '\u{428}', '\u{429}', '\u{42a}', '\u{42b}',
654 '\u{42c}', '\u{42d}', '\u{42e}', '\u{42f}', '\u{430}', '\u{431}', '\u{432}', '\u{433}',
655 '\u{434}', '\u{435}', '\u{436}', '\u{437}', '\u{438}', '\u{439}', '\u{43a}', '\u{43b}',
656 '\u{43c}', '\u{43d}', '\u{43e}', '\u{43f}', '\u{440}', '\u{441}', '\u{442}', '\u{443}',
657 '\u{444}', '\u{445}', '\u{446}', '\u{447}', '\u{448}', '\u{449}', '\u{44a}', '\u{44b}',
658 '\u{44c}', '\u{44d}', '\u{44e}', '\u{44f}', '\u{2116}', '\u{451}', '\u{452}', '\u{453}',
659 '\u{454}', '\u{455}', '\u{456}', '\u{457}', '\u{458}', '\u{459}', '\u{45a}', '\u{45b}',
660 '\u{45c}', '\u{a7}', '\u{45e}', '\u{45f}',
661];
662
663const UNICODE_TO_ISO_8859_5: &[(u16, u8)] = &[
664 (128, 128),
665 (129, 129),
666 (130, 130),
667 (131, 131),
668 (132, 132),
669 (133, 133),
670 (134, 134),
671 (135, 135),
672 (136, 136),
673 (137, 137),
674 (138, 138),
675 (139, 139),
676 (140, 140),
677 (141, 141),
678 (142, 142),
679 (143, 143),
680 (144, 144),
681 (145, 145),
682 (146, 146),
683 (147, 147),
684 (148, 148),
685 (149, 149),
686 (150, 150),
687 (151, 151),
688 (152, 152),
689 (153, 153),
690 (154, 154),
691 (155, 155),
692 (156, 156),
693 (157, 157),
694 (158, 158),
695 (159, 159),
696 (160, 160),
697 (167, 253),
698 (173, 173),
699 (1025, 161),
700 (1026, 162),
701 (1027, 163),
702 (1028, 164),
703 (1029, 165),
704 (1030, 166),
705 (1031, 167),
706 (1032, 168),
707 (1033, 169),
708 (1034, 170),
709 (1035, 171),
710 (1036, 172),
711 (1038, 174),
712 (1039, 175),
713 (1040, 176),
714 (1041, 177),
715 (1042, 178),
716 (1043, 179),
717 (1044, 180),
718 (1045, 181),
719 (1046, 182),
720 (1047, 183),
721 (1048, 184),
722 (1049, 185),
723 (1050, 186),
724 (1051, 187),
725 (1052, 188),
726 (1053, 189),
727 (1054, 190),
728 (1055, 191),
729 (1056, 192),
730 (1057, 193),
731 (1058, 194),
732 (1059, 195),
733 (1060, 196),
734 (1061, 197),
735 (1062, 198),
736 (1063, 199),
737 (1064, 200),
738 (1065, 201),
739 (1066, 202),
740 (1067, 203),
741 (1068, 204),
742 (1069, 205),
743 (1070, 206),
744 (1071, 207),
745 (1072, 208),
746 (1073, 209),
747 (1074, 210),
748 (1075, 211),
749 (1076, 212),
750 (1077, 213),
751 (1078, 214),
752 (1079, 215),
753 (1080, 216),
754 (1081, 217),
755 (1082, 218),
756 (1083, 219),
757 (1084, 220),
758 (1085, 221),
759 (1086, 222),
760 (1087, 223),
761 (1088, 224),
762 (1089, 225),
763 (1090, 226),
764 (1091, 227),
765 (1092, 228),
766 (1093, 229),
767 (1094, 230),
768 (1095, 231),
769 (1096, 232),
770 (1097, 233),
771 (1098, 234),
772 (1099, 235),
773 (1100, 236),
774 (1101, 237),
775 (1102, 238),
776 (1103, 239),
777 (1105, 241),
778 (1106, 242),
779 (1107, 243),
780 (1108, 244),
781 (1109, 245),
782 (1110, 246),
783 (1111, 247),
784 (1112, 248),
785 (1113, 249),
786 (1114, 250),
787 (1115, 251),
788 (1116, 252),
789 (1118, 254),
790 (1119, 255),
791 (8470, 240),
792];
793
794const ISO_8859_6_TO_UNICODE: [char; 128] = [
795 '\u{80}',
796 '\u{81}',
797 '\u{82}',
798 '\u{83}',
799 '\u{84}',
800 '\u{85}',
801 '\u{86}',
802 '\u{87}',
803 '\u{88}',
804 '\u{89}',
805 '\u{8a}',
806 '\u{8b}',
807 '\u{8c}',
808 '\u{8d}',
809 '\u{8e}',
810 '\u{8f}',
811 '\u{90}',
812 '\u{91}',
813 '\u{92}',
814 '\u{93}',
815 '\u{94}',
816 '\u{95}',
817 '\u{96}',
818 '\u{97}',
819 '\u{98}',
820 '\u{99}',
821 '\u{9a}',
822 '\u{9b}',
823 '\u{9c}',
824 '\u{9d}',
825 '\u{9e}',
826 '\u{9f}',
827 '\u{a0}',
828 char::REPLACEMENT_CHARACTER,
829 char::REPLACEMENT_CHARACTER,
830 char::REPLACEMENT_CHARACTER,
831 '\u{a4}',
832 char::REPLACEMENT_CHARACTER,
833 char::REPLACEMENT_CHARACTER,
834 char::REPLACEMENT_CHARACTER,
835 char::REPLACEMENT_CHARACTER,
836 char::REPLACEMENT_CHARACTER,
837 char::REPLACEMENT_CHARACTER,
838 char::REPLACEMENT_CHARACTER,
839 '\u{60c}',
840 '\u{ad}',
841 char::REPLACEMENT_CHARACTER,
842 char::REPLACEMENT_CHARACTER,
843 char::REPLACEMENT_CHARACTER,
844 char::REPLACEMENT_CHARACTER,
845 char::REPLACEMENT_CHARACTER,
846 char::REPLACEMENT_CHARACTER,
847 char::REPLACEMENT_CHARACTER,
848 char::REPLACEMENT_CHARACTER,
849 char::REPLACEMENT_CHARACTER,
850 char::REPLACEMENT_CHARACTER,
851 char::REPLACEMENT_CHARACTER,
852 char::REPLACEMENT_CHARACTER,
853 char::REPLACEMENT_CHARACTER,
854 '\u{61b}',
855 char::REPLACEMENT_CHARACTER,
856 char::REPLACEMENT_CHARACTER,
857 char::REPLACEMENT_CHARACTER,
858 '\u{61f}',
859 char::REPLACEMENT_CHARACTER,
860 '\u{621}',
861 '\u{622}',
862 '\u{623}',
863 '\u{624}',
864 '\u{625}',
865 '\u{626}',
866 '\u{627}',
867 '\u{628}',
868 '\u{629}',
869 '\u{62a}',
870 '\u{62b}',
871 '\u{62c}',
872 '\u{62d}',
873 '\u{62e}',
874 '\u{62f}',
875 '\u{630}',
876 '\u{631}',
877 '\u{632}',
878 '\u{633}',
879 '\u{634}',
880 '\u{635}',
881 '\u{636}',
882 '\u{637}',
883 '\u{638}',
884 '\u{639}',
885 '\u{63a}',
886 char::REPLACEMENT_CHARACTER,
887 char::REPLACEMENT_CHARACTER,
888 char::REPLACEMENT_CHARACTER,
889 char::REPLACEMENT_CHARACTER,
890 char::REPLACEMENT_CHARACTER,
891 '\u{640}',
892 '\u{641}',
893 '\u{642}',
894 '\u{643}',
895 '\u{644}',
896 '\u{645}',
897 '\u{646}',
898 '\u{647}',
899 '\u{648}',
900 '\u{649}',
901 '\u{64a}',
902 '\u{64b}',
903 '\u{64c}',
904 '\u{64d}',
905 '\u{64e}',
906 '\u{64f}',
907 '\u{650}',
908 '\u{651}',
909 '\u{652}',
910 char::REPLACEMENT_CHARACTER,
911 char::REPLACEMENT_CHARACTER,
912 char::REPLACEMENT_CHARACTER,
913 char::REPLACEMENT_CHARACTER,
914 char::REPLACEMENT_CHARACTER,
915 char::REPLACEMENT_CHARACTER,
916 char::REPLACEMENT_CHARACTER,
917 char::REPLACEMENT_CHARACTER,
918 char::REPLACEMENT_CHARACTER,
919 char::REPLACEMENT_CHARACTER,
920 char::REPLACEMENT_CHARACTER,
921 char::REPLACEMENT_CHARACTER,
922 char::REPLACEMENT_CHARACTER,
923];
924
925const UNICODE_TO_ISO_8859_6: &[(u16, u8)] = &[
926 (128, 128),
927 (129, 129),
928 (130, 130),
929 (131, 131),
930 (132, 132),
931 (133, 133),
932 (134, 134),
933 (135, 135),
934 (136, 136),
935 (137, 137),
936 (138, 138),
937 (139, 139),
938 (140, 140),
939 (141, 141),
940 (142, 142),
941 (143, 143),
942 (144, 144),
943 (145, 145),
944 (146, 146),
945 (147, 147),
946 (148, 148),
947 (149, 149),
948 (150, 150),
949 (151, 151),
950 (152, 152),
951 (153, 153),
952 (154, 154),
953 (155, 155),
954 (156, 156),
955 (157, 157),
956 (158, 158),
957 (159, 159),
958 (160, 160),
959 (164, 164),
960 (173, 173),
961 (1548, 172),
962 (1563, 187),
963 (1567, 191),
964 (1569, 193),
965 (1570, 194),
966 (1571, 195),
967 (1572, 196),
968 (1573, 197),
969 (1574, 198),
970 (1575, 199),
971 (1576, 200),
972 (1577, 201),
973 (1578, 202),
974 (1579, 203),
975 (1580, 204),
976 (1581, 205),
977 (1582, 206),
978 (1583, 207),
979 (1584, 208),
980 (1585, 209),
981 (1586, 210),
982 (1587, 211),
983 (1588, 212),
984 (1589, 213),
985 (1590, 214),
986 (1591, 215),
987 (1592, 216),
988 (1593, 217),
989 (1594, 218),
990 (1600, 224),
991 (1601, 225),
992 (1602, 226),
993 (1603, 227),
994 (1604, 228),
995 (1605, 229),
996 (1606, 230),
997 (1607, 231),
998 (1608, 232),
999 (1609, 233),
1000 (1610, 234),
1001 (1611, 235),
1002 (1612, 236),
1003 (1613, 237),
1004 (1614, 238),
1005 (1615, 239),
1006 (1616, 240),
1007 (1617, 241),
1008 (1618, 242),
1009];
1010
1011const ISO_8859_7_TO_UNICODE: [char; 128] = [
1012 '\u{80}',
1013 '\u{81}',
1014 '\u{82}',
1015 '\u{83}',
1016 '\u{84}',
1017 '\u{85}',
1018 '\u{86}',
1019 '\u{87}',
1020 '\u{88}',
1021 '\u{89}',
1022 '\u{8a}',
1023 '\u{8b}',
1024 '\u{8c}',
1025 '\u{8d}',
1026 '\u{8e}',
1027 '\u{8f}',
1028 '\u{90}',
1029 '\u{91}',
1030 '\u{92}',
1031 '\u{93}',
1032 '\u{94}',
1033 '\u{95}',
1034 '\u{96}',
1035 '\u{97}',
1036 '\u{98}',
1037 '\u{99}',
1038 '\u{9a}',
1039 '\u{9b}',
1040 '\u{9c}',
1041 '\u{9d}',
1042 '\u{9e}',
1043 '\u{9f}',
1044 '\u{a0}',
1045 '\u{2018}',
1046 '\u{2019}',
1047 '\u{a3}',
1048 '\u{20ac}',
1049 '\u{20af}',
1050 '\u{a6}',
1051 '\u{a7}',
1052 '\u{a8}',
1053 '\u{a9}',
1054 '\u{37a}',
1055 '\u{ab}',
1056 '\u{ac}',
1057 '\u{ad}',
1058 char::REPLACEMENT_CHARACTER,
1059 '\u{2015}',
1060 '\u{b0}',
1061 '\u{b1}',
1062 '\u{b2}',
1063 '\u{b3}',
1064 '\u{384}',
1065 '\u{385}',
1066 '\u{386}',
1067 '\u{b7}',
1068 '\u{388}',
1069 '\u{389}',
1070 '\u{38a}',
1071 '\u{bb}',
1072 '\u{38c}',
1073 '\u{bd}',
1074 '\u{38e}',
1075 '\u{38f}',
1076 '\u{390}',
1077 '\u{391}',
1078 '\u{392}',
1079 '\u{393}',
1080 '\u{394}',
1081 '\u{395}',
1082 '\u{396}',
1083 '\u{397}',
1084 '\u{398}',
1085 '\u{399}',
1086 '\u{39a}',
1087 '\u{39b}',
1088 '\u{39c}',
1089 '\u{39d}',
1090 '\u{39e}',
1091 '\u{39f}',
1092 '\u{3a0}',
1093 '\u{3a1}',
1094 char::REPLACEMENT_CHARACTER,
1095 '\u{3a3}',
1096 '\u{3a4}',
1097 '\u{3a5}',
1098 '\u{3a6}',
1099 '\u{3a7}',
1100 '\u{3a8}',
1101 '\u{3a9}',
1102 '\u{3aa}',
1103 '\u{3ab}',
1104 '\u{3ac}',
1105 '\u{3ad}',
1106 '\u{3ae}',
1107 '\u{3af}',
1108 '\u{3b0}',
1109 '\u{3b1}',
1110 '\u{3b2}',
1111 '\u{3b3}',
1112 '\u{3b4}',
1113 '\u{3b5}',
1114 '\u{3b6}',
1115 '\u{3b7}',
1116 '\u{3b8}',
1117 '\u{3b9}',
1118 '\u{3ba}',
1119 '\u{3bb}',
1120 '\u{3bc}',
1121 '\u{3bd}',
1122 '\u{3be}',
1123 '\u{3bf}',
1124 '\u{3c0}',
1125 '\u{3c1}',
1126 '\u{3c2}',
1127 '\u{3c3}',
1128 '\u{3c4}',
1129 '\u{3c5}',
1130 '\u{3c6}',
1131 '\u{3c7}',
1132 '\u{3c8}',
1133 '\u{3c9}',
1134 '\u{3ca}',
1135 '\u{3cb}',
1136 '\u{3cc}',
1137 '\u{3cd}',
1138 '\u{3ce}',
1139 char::REPLACEMENT_CHARACTER,
1140];
1141
1142const UNICODE_TO_ISO_8859_7: &[(u16, u8)] = &[
1143 (128, 128),
1144 (129, 129),
1145 (130, 130),
1146 (131, 131),
1147 (132, 132),
1148 (133, 133),
1149 (134, 134),
1150 (135, 135),
1151 (136, 136),
1152 (137, 137),
1153 (138, 138),
1154 (139, 139),
1155 (140, 140),
1156 (141, 141),
1157 (142, 142),
1158 (143, 143),
1159 (144, 144),
1160 (145, 145),
1161 (146, 146),
1162 (147, 147),
1163 (148, 148),
1164 (149, 149),
1165 (150, 150),
1166 (151, 151),
1167 (152, 152),
1168 (153, 153),
1169 (154, 154),
1170 (155, 155),
1171 (156, 156),
1172 (157, 157),
1173 (158, 158),
1174 (159, 159),
1175 (160, 160),
1176 (163, 163),
1177 (166, 166),
1178 (167, 167),
1179 (168, 168),
1180 (169, 169),
1181 (171, 171),
1182 (172, 172),
1183 (173, 173),
1184 (176, 176),
1185 (177, 177),
1186 (178, 178),
1187 (179, 179),
1188 (183, 183),
1189 (187, 187),
1190 (189, 189),
1191 (890, 170),
1192 (900, 180),
1193 (901, 181),
1194 (902, 182),
1195 (904, 184),
1196 (905, 185),
1197 (906, 186),
1198 (908, 188),
1199 (910, 190),
1200 (911, 191),
1201 (912, 192),
1202 (913, 193),
1203 (914, 194),
1204 (915, 195),
1205 (916, 196),
1206 (917, 197),
1207 (918, 198),
1208 (919, 199),
1209 (920, 200),
1210 (921, 201),
1211 (922, 202),
1212 (923, 203),
1213 (924, 204),
1214 (925, 205),
1215 (926, 206),
1216 (927, 207),
1217 (928, 208),
1218 (929, 209),
1219 (931, 211),
1220 (932, 212),
1221 (933, 213),
1222 (934, 214),
1223 (935, 215),
1224 (936, 216),
1225 (937, 217),
1226 (938, 218),
1227 (939, 219),
1228 (940, 220),
1229 (941, 221),
1230 (942, 222),
1231 (943, 223),
1232 (944, 224),
1233 (945, 225),
1234 (946, 226),
1235 (947, 227),
1236 (948, 228),
1237 (949, 229),
1238 (950, 230),
1239 (951, 231),
1240 (952, 232),
1241 (953, 233),
1242 (954, 234),
1243 (955, 235),
1244 (956, 236),
1245 (957, 237),
1246 (958, 238),
1247 (959, 239),
1248 (960, 240),
1249 (961, 241),
1250 (962, 242),
1251 (963, 243),
1252 (964, 244),
1253 (965, 245),
1254 (966, 246),
1255 (967, 247),
1256 (968, 248),
1257 (969, 249),
1258 (970, 250),
1259 (971, 251),
1260 (972, 252),
1261 (973, 253),
1262 (974, 254),
1263 (8213, 175),
1264 (8216, 161),
1265 (8217, 162),
1266 (8364, 164),
1267 (8367, 165),
1268];
1269
1270const ISO_8859_8_TO_UNICODE: [char; 128] = [
1271 '\u{80}',
1272 '\u{81}',
1273 '\u{82}',
1274 '\u{83}',
1275 '\u{84}',
1276 '\u{85}',
1277 '\u{86}',
1278 '\u{87}',
1279 '\u{88}',
1280 '\u{89}',
1281 '\u{8a}',
1282 '\u{8b}',
1283 '\u{8c}',
1284 '\u{8d}',
1285 '\u{8e}',
1286 '\u{8f}',
1287 '\u{90}',
1288 '\u{91}',
1289 '\u{92}',
1290 '\u{93}',
1291 '\u{94}',
1292 '\u{95}',
1293 '\u{96}',
1294 '\u{97}',
1295 '\u{98}',
1296 '\u{99}',
1297 '\u{9a}',
1298 '\u{9b}',
1299 '\u{9c}',
1300 '\u{9d}',
1301 '\u{9e}',
1302 '\u{9f}',
1303 '\u{a0}',
1304 char::REPLACEMENT_CHARACTER,
1305 '\u{a2}',
1306 '\u{a3}',
1307 '\u{a4}',
1308 '\u{a5}',
1309 '\u{a6}',
1310 '\u{a7}',
1311 '\u{a8}',
1312 '\u{a9}',
1313 '\u{d7}',
1314 '\u{ab}',
1315 '\u{ac}',
1316 '\u{ad}',
1317 '\u{ae}',
1318 '\u{af}',
1319 '\u{b0}',
1320 '\u{b1}',
1321 '\u{b2}',
1322 '\u{b3}',
1323 '\u{b4}',
1324 '\u{b5}',
1325 '\u{b6}',
1326 '\u{b7}',
1327 '\u{b8}',
1328 '\u{b9}',
1329 '\u{f7}',
1330 '\u{bb}',
1331 '\u{bc}',
1332 '\u{bd}',
1333 '\u{be}',
1334 char::REPLACEMENT_CHARACTER,
1335 char::REPLACEMENT_CHARACTER,
1336 char::REPLACEMENT_CHARACTER,
1337 char::REPLACEMENT_CHARACTER,
1338 char::REPLACEMENT_CHARACTER,
1339 char::REPLACEMENT_CHARACTER,
1340 char::REPLACEMENT_CHARACTER,
1341 char::REPLACEMENT_CHARACTER,
1342 char::REPLACEMENT_CHARACTER,
1343 char::REPLACEMENT_CHARACTER,
1344 char::REPLACEMENT_CHARACTER,
1345 char::REPLACEMENT_CHARACTER,
1346 char::REPLACEMENT_CHARACTER,
1347 char::REPLACEMENT_CHARACTER,
1348 char::REPLACEMENT_CHARACTER,
1349 char::REPLACEMENT_CHARACTER,
1350 char::REPLACEMENT_CHARACTER,
1351 char::REPLACEMENT_CHARACTER,
1352 char::REPLACEMENT_CHARACTER,
1353 char::REPLACEMENT_CHARACTER,
1354 char::REPLACEMENT_CHARACTER,
1355 char::REPLACEMENT_CHARACTER,
1356 char::REPLACEMENT_CHARACTER,
1357 char::REPLACEMENT_CHARACTER,
1358 char::REPLACEMENT_CHARACTER,
1359 char::REPLACEMENT_CHARACTER,
1360 char::REPLACEMENT_CHARACTER,
1361 char::REPLACEMENT_CHARACTER,
1362 char::REPLACEMENT_CHARACTER,
1363 char::REPLACEMENT_CHARACTER,
1364 char::REPLACEMENT_CHARACTER,
1365 char::REPLACEMENT_CHARACTER,
1366 '\u{2017}',
1367 '\u{5d0}',
1368 '\u{5d1}',
1369 '\u{5d2}',
1370 '\u{5d3}',
1371 '\u{5d4}',
1372 '\u{5d5}',
1373 '\u{5d6}',
1374 '\u{5d7}',
1375 '\u{5d8}',
1376 '\u{5d9}',
1377 '\u{5da}',
1378 '\u{5db}',
1379 '\u{5dc}',
1380 '\u{5dd}',
1381 '\u{5de}',
1382 '\u{5df}',
1383 '\u{5e0}',
1384 '\u{5e1}',
1385 '\u{5e2}',
1386 '\u{5e3}',
1387 '\u{5e4}',
1388 '\u{5e5}',
1389 '\u{5e6}',
1390 '\u{5e7}',
1391 '\u{5e8}',
1392 '\u{5e9}',
1393 '\u{5ea}',
1394 char::REPLACEMENT_CHARACTER,
1395 char::REPLACEMENT_CHARACTER,
1396 '\u{200e}',
1397 '\u{200f}',
1398 char::REPLACEMENT_CHARACTER,
1399];
1400
1401const UNICODE_TO_ISO_8859_8: &[(u16, u8)] = &[
1402 (128, 128),
1403 (129, 129),
1404 (130, 130),
1405 (131, 131),
1406 (132, 132),
1407 (133, 133),
1408 (134, 134),
1409 (135, 135),
1410 (136, 136),
1411 (137, 137),
1412 (138, 138),
1413 (139, 139),
1414 (140, 140),
1415 (141, 141),
1416 (142, 142),
1417 (143, 143),
1418 (144, 144),
1419 (145, 145),
1420 (146, 146),
1421 (147, 147),
1422 (148, 148),
1423 (149, 149),
1424 (150, 150),
1425 (151, 151),
1426 (152, 152),
1427 (153, 153),
1428 (154, 154),
1429 (155, 155),
1430 (156, 156),
1431 (157, 157),
1432 (158, 158),
1433 (159, 159),
1434 (160, 160),
1435 (162, 162),
1436 (163, 163),
1437 (164, 164),
1438 (165, 165),
1439 (166, 166),
1440 (167, 167),
1441 (168, 168),
1442 (169, 169),
1443 (171, 171),
1444 (172, 172),
1445 (173, 173),
1446 (174, 174),
1447 (175, 175),
1448 (176, 176),
1449 (177, 177),
1450 (178, 178),
1451 (179, 179),
1452 (180, 180),
1453 (181, 181),
1454 (182, 182),
1455 (183, 183),
1456 (184, 184),
1457 (185, 185),
1458 (187, 187),
1459 (188, 188),
1460 (189, 189),
1461 (190, 190),
1462 (215, 170),
1463 (247, 186),
1464 (1488, 224),
1465 (1489, 225),
1466 (1490, 226),
1467 (1491, 227),
1468 (1492, 228),
1469 (1493, 229),
1470 (1494, 230),
1471 (1495, 231),
1472 (1496, 232),
1473 (1497, 233),
1474 (1498, 234),
1475 (1499, 235),
1476 (1500, 236),
1477 (1501, 237),
1478 (1502, 238),
1479 (1503, 239),
1480 (1504, 240),
1481 (1505, 241),
1482 (1506, 242),
1483 (1507, 243),
1484 (1508, 244),
1485 (1509, 245),
1486 (1510, 246),
1487 (1511, 247),
1488 (1512, 248),
1489 (1513, 249),
1490 (1514, 250),
1491 (8206, 253),
1492 (8207, 254),
1493 (8215, 223),
1494];
1495
1496const ISO_8859_9_TO_UNICODE: [char; 128] = [
1497 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
1498 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
1499 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
1500 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{a1}', '\u{a2}', '\u{a3}',
1501 '\u{a4}', '\u{a5}', '\u{a6}', '\u{a7}', '\u{a8}', '\u{a9}', '\u{aa}', '\u{ab}', '\u{ac}',
1502 '\u{ad}', '\u{ae}', '\u{af}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{b4}', '\u{b5}',
1503 '\u{b6}', '\u{b7}', '\u{b8}', '\u{b9}', '\u{ba}', '\u{bb}', '\u{bc}', '\u{bd}', '\u{be}',
1504 '\u{bf}', '\u{c0}', '\u{c1}', '\u{c2}', '\u{c3}', '\u{c4}', '\u{c5}', '\u{c6}', '\u{c7}',
1505 '\u{c8}', '\u{c9}', '\u{ca}', '\u{cb}', '\u{cc}', '\u{cd}', '\u{ce}', '\u{cf}', '\u{11e}',
1506 '\u{d1}', '\u{d2}', '\u{d3}', '\u{d4}', '\u{d5}', '\u{d6}', '\u{d7}', '\u{d8}', '\u{d9}',
1507 '\u{da}', '\u{db}', '\u{dc}', '\u{130}', '\u{15e}', '\u{df}', '\u{e0}', '\u{e1}', '\u{e2}',
1508 '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{e7}', '\u{e8}', '\u{e9}', '\u{ea}', '\u{eb}',
1509 '\u{ec}', '\u{ed}', '\u{ee}', '\u{ef}', '\u{11f}', '\u{f1}', '\u{f2}', '\u{f3}', '\u{f4}',
1510 '\u{f5}', '\u{f6}', '\u{f7}', '\u{f8}', '\u{f9}', '\u{fa}', '\u{fb}', '\u{fc}', '\u{131}',
1511 '\u{15f}', '\u{ff}',
1512];
1513
1514const UNICODE_TO_ISO_8859_9: &[(u16, u8)] = &[
1515 (128, 128),
1516 (129, 129),
1517 (130, 130),
1518 (131, 131),
1519 (132, 132),
1520 (133, 133),
1521 (134, 134),
1522 (135, 135),
1523 (136, 136),
1524 (137, 137),
1525 (138, 138),
1526 (139, 139),
1527 (140, 140),
1528 (141, 141),
1529 (142, 142),
1530 (143, 143),
1531 (144, 144),
1532 (145, 145),
1533 (146, 146),
1534 (147, 147),
1535 (148, 148),
1536 (149, 149),
1537 (150, 150),
1538 (151, 151),
1539 (152, 152),
1540 (153, 153),
1541 (154, 154),
1542 (155, 155),
1543 (156, 156),
1544 (157, 157),
1545 (158, 158),
1546 (159, 159),
1547 (160, 160),
1548 (161, 161),
1549 (162, 162),
1550 (163, 163),
1551 (164, 164),
1552 (165, 165),
1553 (166, 166),
1554 (167, 167),
1555 (168, 168),
1556 (169, 169),
1557 (170, 170),
1558 (171, 171),
1559 (172, 172),
1560 (173, 173),
1561 (174, 174),
1562 (175, 175),
1563 (176, 176),
1564 (177, 177),
1565 (178, 178),
1566 (179, 179),
1567 (180, 180),
1568 (181, 181),
1569 (182, 182),
1570 (183, 183),
1571 (184, 184),
1572 (185, 185),
1573 (186, 186),
1574 (187, 187),
1575 (188, 188),
1576 (189, 189),
1577 (190, 190),
1578 (191, 191),
1579 (192, 192),
1580 (193, 193),
1581 (194, 194),
1582 (195, 195),
1583 (196, 196),
1584 (197, 197),
1585 (198, 198),
1586 (199, 199),
1587 (200, 200),
1588 (201, 201),
1589 (202, 202),
1590 (203, 203),
1591 (204, 204),
1592 (205, 205),
1593 (206, 206),
1594 (207, 207),
1595 (209, 209),
1596 (210, 210),
1597 (211, 211),
1598 (212, 212),
1599 (213, 213),
1600 (214, 214),
1601 (215, 215),
1602 (216, 216),
1603 (217, 217),
1604 (218, 218),
1605 (219, 219),
1606 (220, 220),
1607 (223, 223),
1608 (224, 224),
1609 (225, 225),
1610 (226, 226),
1611 (227, 227),
1612 (228, 228),
1613 (229, 229),
1614 (230, 230),
1615 (231, 231),
1616 (232, 232),
1617 (233, 233),
1618 (234, 234),
1619 (235, 235),
1620 (236, 236),
1621 (237, 237),
1622 (238, 238),
1623 (239, 239),
1624 (241, 241),
1625 (242, 242),
1626 (243, 243),
1627 (244, 244),
1628 (245, 245),
1629 (246, 246),
1630 (247, 247),
1631 (248, 248),
1632 (249, 249),
1633 (250, 250),
1634 (251, 251),
1635 (252, 252),
1636 (255, 255),
1637 (286, 208),
1638 (287, 240),
1639 (304, 221),
1640 (305, 253),
1641 (350, 222),
1642 (351, 254),
1643];
1644
1645const ISO_8859_10_TO_UNICODE: [char; 128] = [
1646 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
1647 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
1648 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
1649 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{104}', '\u{112}', '\u{122}',
1650 '\u{12a}', '\u{128}', '\u{136}', '\u{a7}', '\u{13b}', '\u{110}', '\u{160}', '\u{166}',
1651 '\u{17d}', '\u{ad}', '\u{16a}', '\u{14a}', '\u{b0}', '\u{105}', '\u{113}', '\u{123}',
1652 '\u{12b}', '\u{129}', '\u{137}', '\u{b7}', '\u{13c}', '\u{111}', '\u{161}', '\u{167}',
1653 '\u{17e}', '\u{2015}', '\u{16b}', '\u{14b}', '\u{100}', '\u{c1}', '\u{c2}', '\u{c3}', '\u{c4}',
1654 '\u{c5}', '\u{c6}', '\u{12e}', '\u{10c}', '\u{c9}', '\u{118}', '\u{cb}', '\u{116}', '\u{cd}',
1655 '\u{ce}', '\u{cf}', '\u{d0}', '\u{145}', '\u{14c}', '\u{d3}', '\u{d4}', '\u{d5}', '\u{d6}',
1656 '\u{168}', '\u{d8}', '\u{172}', '\u{da}', '\u{db}', '\u{dc}', '\u{dd}', '\u{de}', '\u{df}',
1657 '\u{101}', '\u{e1}', '\u{e2}', '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{12f}', '\u{10d}',
1658 '\u{e9}', '\u{119}', '\u{eb}', '\u{117}', '\u{ed}', '\u{ee}', '\u{ef}', '\u{f0}', '\u{146}',
1659 '\u{14d}', '\u{f3}', '\u{f4}', '\u{f5}', '\u{f6}', '\u{169}', '\u{f8}', '\u{173}', '\u{fa}',
1660 '\u{fb}', '\u{fc}', '\u{fd}', '\u{fe}', '\u{138}',
1661];
1662
1663const UNICODE_TO_ISO_8859_10: &[(u16, u8)] = &[
1664 (128, 128),
1665 (129, 129),
1666 (130, 130),
1667 (131, 131),
1668 (132, 132),
1669 (133, 133),
1670 (134, 134),
1671 (135, 135),
1672 (136, 136),
1673 (137, 137),
1674 (138, 138),
1675 (139, 139),
1676 (140, 140),
1677 (141, 141),
1678 (142, 142),
1679 (143, 143),
1680 (144, 144),
1681 (145, 145),
1682 (146, 146),
1683 (147, 147),
1684 (148, 148),
1685 (149, 149),
1686 (150, 150),
1687 (151, 151),
1688 (152, 152),
1689 (153, 153),
1690 (154, 154),
1691 (155, 155),
1692 (156, 156),
1693 (157, 157),
1694 (158, 158),
1695 (159, 159),
1696 (160, 160),
1697 (167, 167),
1698 (173, 173),
1699 (176, 176),
1700 (183, 183),
1701 (193, 193),
1702 (194, 194),
1703 (195, 195),
1704 (196, 196),
1705 (197, 197),
1706 (198, 198),
1707 (201, 201),
1708 (203, 203),
1709 (205, 205),
1710 (206, 206),
1711 (207, 207),
1712 (208, 208),
1713 (211, 211),
1714 (212, 212),
1715 (213, 213),
1716 (214, 214),
1717 (216, 216),
1718 (218, 218),
1719 (219, 219),
1720 (220, 220),
1721 (221, 221),
1722 (222, 222),
1723 (223, 223),
1724 (225, 225),
1725 (226, 226),
1726 (227, 227),
1727 (228, 228),
1728 (229, 229),
1729 (230, 230),
1730 (233, 233),
1731 (235, 235),
1732 (237, 237),
1733 (238, 238),
1734 (239, 239),
1735 (240, 240),
1736 (243, 243),
1737 (244, 244),
1738 (245, 245),
1739 (246, 246),
1740 (248, 248),
1741 (250, 250),
1742 (251, 251),
1743 (252, 252),
1744 (253, 253),
1745 (254, 254),
1746 (256, 192),
1747 (257, 224),
1748 (260, 161),
1749 (261, 177),
1750 (268, 200),
1751 (269, 232),
1752 (272, 169),
1753 (273, 185),
1754 (274, 162),
1755 (275, 178),
1756 (278, 204),
1757 (279, 236),
1758 (280, 202),
1759 (281, 234),
1760 (290, 163),
1761 (291, 179),
1762 (296, 165),
1763 (297, 181),
1764 (298, 164),
1765 (299, 180),
1766 (302, 199),
1767 (303, 231),
1768 (310, 166),
1769 (311, 182),
1770 (312, 255),
1771 (315, 168),
1772 (316, 184),
1773 (325, 209),
1774 (326, 241),
1775 (330, 175),
1776 (331, 191),
1777 (332, 210),
1778 (333, 242),
1779 (352, 170),
1780 (353, 186),
1781 (358, 171),
1782 (359, 187),
1783 (360, 215),
1784 (361, 247),
1785 (362, 174),
1786 (363, 190),
1787 (370, 217),
1788 (371, 249),
1789 (381, 172),
1790 (382, 188),
1791 (8213, 189),
1792];
1793
1794const ISO_8859_11_TO_UNICODE: [char; 128] = [
1795 '\u{80}',
1796 '\u{81}',
1797 '\u{82}',
1798 '\u{83}',
1799 '\u{84}',
1800 '\u{85}',
1801 '\u{86}',
1802 '\u{87}',
1803 '\u{88}',
1804 '\u{89}',
1805 '\u{8a}',
1806 '\u{8b}',
1807 '\u{8c}',
1808 '\u{8d}',
1809 '\u{8e}',
1810 '\u{8f}',
1811 '\u{90}',
1812 '\u{91}',
1813 '\u{92}',
1814 '\u{93}',
1815 '\u{94}',
1816 '\u{95}',
1817 '\u{96}',
1818 '\u{97}',
1819 '\u{98}',
1820 '\u{99}',
1821 '\u{9a}',
1822 '\u{9b}',
1823 '\u{9c}',
1824 '\u{9d}',
1825 '\u{9e}',
1826 '\u{9f}',
1827 '\u{a0}',
1828 '\u{e01}',
1829 '\u{e02}',
1830 '\u{e03}',
1831 '\u{e04}',
1832 '\u{e05}',
1833 '\u{e06}',
1834 '\u{e07}',
1835 '\u{e08}',
1836 '\u{e09}',
1837 '\u{e0a}',
1838 '\u{e0b}',
1839 '\u{e0c}',
1840 '\u{e0d}',
1841 '\u{e0e}',
1842 '\u{e0f}',
1843 '\u{e10}',
1844 '\u{e11}',
1845 '\u{e12}',
1846 '\u{e13}',
1847 '\u{e14}',
1848 '\u{e15}',
1849 '\u{e16}',
1850 '\u{e17}',
1851 '\u{e18}',
1852 '\u{e19}',
1853 '\u{e1a}',
1854 '\u{e1b}',
1855 '\u{e1c}',
1856 '\u{e1d}',
1857 '\u{e1e}',
1858 '\u{e1f}',
1859 '\u{e20}',
1860 '\u{e21}',
1861 '\u{e22}',
1862 '\u{e23}',
1863 '\u{e24}',
1864 '\u{e25}',
1865 '\u{e26}',
1866 '\u{e27}',
1867 '\u{e28}',
1868 '\u{e29}',
1869 '\u{e2a}',
1870 '\u{e2b}',
1871 '\u{e2c}',
1872 '\u{e2d}',
1873 '\u{e2e}',
1874 '\u{e2f}',
1875 '\u{e30}',
1876 '\u{e31}',
1877 '\u{e32}',
1878 '\u{e33}',
1879 '\u{e34}',
1880 '\u{e35}',
1881 '\u{e36}',
1882 '\u{e37}',
1883 '\u{e38}',
1884 '\u{e39}',
1885 '\u{e3a}',
1886 char::REPLACEMENT_CHARACTER,
1887 char::REPLACEMENT_CHARACTER,
1888 char::REPLACEMENT_CHARACTER,
1889 char::REPLACEMENT_CHARACTER,
1890 '\u{e3f}',
1891 '\u{e40}',
1892 '\u{e41}',
1893 '\u{e42}',
1894 '\u{e43}',
1895 '\u{e44}',
1896 '\u{e45}',
1897 '\u{e46}',
1898 '\u{e47}',
1899 '\u{e48}',
1900 '\u{e49}',
1901 '\u{e4a}',
1902 '\u{e4b}',
1903 '\u{e4c}',
1904 '\u{e4d}',
1905 '\u{e4e}',
1906 '\u{e4f}',
1907 '\u{e50}',
1908 '\u{e51}',
1909 '\u{e52}',
1910 '\u{e53}',
1911 '\u{e54}',
1912 '\u{e55}',
1913 '\u{e56}',
1914 '\u{e57}',
1915 '\u{e58}',
1916 '\u{e59}',
1917 '\u{e5a}',
1918 '\u{e5b}',
1919 char::REPLACEMENT_CHARACTER,
1920 char::REPLACEMENT_CHARACTER,
1921 char::REPLACEMENT_CHARACTER,
1922 char::REPLACEMENT_CHARACTER,
1923];
1924
1925const UNICODE_TO_ISO_8859_11: &[(u16, u8)] = &[
1926 (128, 128),
1927 (129, 129),
1928 (130, 130),
1929 (131, 131),
1930 (132, 132),
1931 (133, 133),
1932 (134, 134),
1933 (135, 135),
1934 (136, 136),
1935 (137, 137),
1936 (138, 138),
1937 (139, 139),
1938 (140, 140),
1939 (141, 141),
1940 (142, 142),
1941 (143, 143),
1942 (144, 144),
1943 (145, 145),
1944 (146, 146),
1945 (147, 147),
1946 (148, 148),
1947 (149, 149),
1948 (150, 150),
1949 (151, 151),
1950 (152, 152),
1951 (153, 153),
1952 (154, 154),
1953 (155, 155),
1954 (156, 156),
1955 (157, 157),
1956 (158, 158),
1957 (159, 159),
1958 (160, 160),
1959 (3585, 161),
1960 (3586, 162),
1961 (3587, 163),
1962 (3588, 164),
1963 (3589, 165),
1964 (3590, 166),
1965 (3591, 167),
1966 (3592, 168),
1967 (3593, 169),
1968 (3594, 170),
1969 (3595, 171),
1970 (3596, 172),
1971 (3597, 173),
1972 (3598, 174),
1973 (3599, 175),
1974 (3600, 176),
1975 (3601, 177),
1976 (3602, 178),
1977 (3603, 179),
1978 (3604, 180),
1979 (3605, 181),
1980 (3606, 182),
1981 (3607, 183),
1982 (3608, 184),
1983 (3609, 185),
1984 (3610, 186),
1985 (3611, 187),
1986 (3612, 188),
1987 (3613, 189),
1988 (3614, 190),
1989 (3615, 191),
1990 (3616, 192),
1991 (3617, 193),
1992 (3618, 194),
1993 (3619, 195),
1994 (3620, 196),
1995 (3621, 197),
1996 (3622, 198),
1997 (3623, 199),
1998 (3624, 200),
1999 (3625, 201),
2000 (3626, 202),
2001 (3627, 203),
2002 (3628, 204),
2003 (3629, 205),
2004 (3630, 206),
2005 (3631, 207),
2006 (3632, 208),
2007 (3633, 209),
2008 (3634, 210),
2009 (3635, 211),
2010 (3636, 212),
2011 (3637, 213),
2012 (3638, 214),
2013 (3639, 215),
2014 (3640, 216),
2015 (3641, 217),
2016 (3642, 218),
2017 (3647, 223),
2018 (3648, 224),
2019 (3649, 225),
2020 (3650, 226),
2021 (3651, 227),
2022 (3652, 228),
2023 (3653, 229),
2024 (3654, 230),
2025 (3655, 231),
2026 (3656, 232),
2027 (3657, 233),
2028 (3658, 234),
2029 (3659, 235),
2030 (3660, 236),
2031 (3661, 237),
2032 (3662, 238),
2033 (3663, 239),
2034 (3664, 240),
2035 (3665, 241),
2036 (3666, 242),
2037 (3667, 243),
2038 (3668, 244),
2039 (3669, 245),
2040 (3670, 246),
2041 (3671, 247),
2042 (3672, 248),
2043 (3673, 249),
2044 (3674, 250),
2045 (3675, 251),
2046];
2047
2048const ISO_8859_13_TO_UNICODE: [char; 128] = [
2049 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
2050 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
2051 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
2052 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{201d}', '\u{a2}', '\u{a3}',
2053 '\u{a4}', '\u{201e}', '\u{a6}', '\u{a7}', '\u{d8}', '\u{a9}', '\u{156}', '\u{ab}', '\u{ac}',
2054 '\u{ad}', '\u{ae}', '\u{c6}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{201c}', '\u{b5}',
2055 '\u{b6}', '\u{b7}', '\u{f8}', '\u{b9}', '\u{157}', '\u{bb}', '\u{bc}', '\u{bd}', '\u{be}',
2056 '\u{e6}', '\u{104}', '\u{12e}', '\u{100}', '\u{106}', '\u{c4}', '\u{c5}', '\u{118}', '\u{112}',
2057 '\u{10c}', '\u{c9}', '\u{179}', '\u{116}', '\u{122}', '\u{136}', '\u{12a}', '\u{13b}',
2058 '\u{160}', '\u{143}', '\u{145}', '\u{d3}', '\u{14c}', '\u{d5}', '\u{d6}', '\u{d7}', '\u{172}',
2059 '\u{141}', '\u{15a}', '\u{16a}', '\u{dc}', '\u{17b}', '\u{17d}', '\u{df}', '\u{105}',
2060 '\u{12f}', '\u{101}', '\u{107}', '\u{e4}', '\u{e5}', '\u{119}', '\u{113}', '\u{10d}', '\u{e9}',
2061 '\u{17a}', '\u{117}', '\u{123}', '\u{137}', '\u{12b}', '\u{13c}', '\u{161}', '\u{144}',
2062 '\u{146}', '\u{f3}', '\u{14d}', '\u{f5}', '\u{f6}', '\u{f7}', '\u{173}', '\u{142}', '\u{15b}',
2063 '\u{16b}', '\u{fc}', '\u{17c}', '\u{17e}', '\u{2019}',
2064];
2065
2066const UNICODE_TO_ISO_8859_13: &[(u16, u8)] = &[
2067 (128, 128),
2068 (129, 129),
2069 (130, 130),
2070 (131, 131),
2071 (132, 132),
2072 (133, 133),
2073 (134, 134),
2074 (135, 135),
2075 (136, 136),
2076 (137, 137),
2077 (138, 138),
2078 (139, 139),
2079 (140, 140),
2080 (141, 141),
2081 (142, 142),
2082 (143, 143),
2083 (144, 144),
2084 (145, 145),
2085 (146, 146),
2086 (147, 147),
2087 (148, 148),
2088 (149, 149),
2089 (150, 150),
2090 (151, 151),
2091 (152, 152),
2092 (153, 153),
2093 (154, 154),
2094 (155, 155),
2095 (156, 156),
2096 (157, 157),
2097 (158, 158),
2098 (159, 159),
2099 (160, 160),
2100 (162, 162),
2101 (163, 163),
2102 (164, 164),
2103 (166, 166),
2104 (167, 167),
2105 (169, 169),
2106 (171, 171),
2107 (172, 172),
2108 (173, 173),
2109 (174, 174),
2110 (176, 176),
2111 (177, 177),
2112 (178, 178),
2113 (179, 179),
2114 (181, 181),
2115 (182, 182),
2116 (183, 183),
2117 (185, 185),
2118 (187, 187),
2119 (188, 188),
2120 (189, 189),
2121 (190, 190),
2122 (196, 196),
2123 (197, 197),
2124 (198, 175),
2125 (201, 201),
2126 (211, 211),
2127 (213, 213),
2128 (214, 214),
2129 (215, 215),
2130 (216, 168),
2131 (220, 220),
2132 (223, 223),
2133 (228, 228),
2134 (229, 229),
2135 (230, 191),
2136 (233, 233),
2137 (243, 243),
2138 (245, 245),
2139 (246, 246),
2140 (247, 247),
2141 (248, 184),
2142 (252, 252),
2143 (256, 194),
2144 (257, 226),
2145 (260, 192),
2146 (261, 224),
2147 (262, 195),
2148 (263, 227),
2149 (268, 200),
2150 (269, 232),
2151 (274, 199),
2152 (275, 231),
2153 (278, 203),
2154 (279, 235),
2155 (280, 198),
2156 (281, 230),
2157 (290, 204),
2158 (291, 236),
2159 (298, 206),
2160 (299, 238),
2161 (302, 193),
2162 (303, 225),
2163 (310, 205),
2164 (311, 237),
2165 (315, 207),
2166 (316, 239),
2167 (321, 217),
2168 (322, 249),
2169 (323, 209),
2170 (324, 241),
2171 (325, 210),
2172 (326, 242),
2173 (332, 212),
2174 (333, 244),
2175 (342, 170),
2176 (343, 186),
2177 (346, 218),
2178 (347, 250),
2179 (352, 208),
2180 (353, 240),
2181 (362, 219),
2182 (363, 251),
2183 (370, 216),
2184 (371, 248),
2185 (377, 202),
2186 (378, 234),
2187 (379, 221),
2188 (380, 253),
2189 (381, 222),
2190 (382, 254),
2191 (8217, 255),
2192 (8220, 180),
2193 (8221, 161),
2194 (8222, 165),
2195];
2196
2197const ISO_8859_14_TO_UNICODE: [char; 128] = [
2198 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
2199 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
2200 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
2201 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{1e02}', '\u{1e03}', '\u{a3}',
2202 '\u{10a}', '\u{10b}', '\u{1e0a}', '\u{a7}', '\u{1e80}', '\u{a9}', '\u{1e82}', '\u{1e0b}',
2203 '\u{1ef2}', '\u{ad}', '\u{ae}', '\u{178}', '\u{1e1e}', '\u{1e1f}', '\u{120}', '\u{121}',
2204 '\u{1e40}', '\u{1e41}', '\u{b6}', '\u{1e56}', '\u{1e81}', '\u{1e57}', '\u{1e83}', '\u{1e60}',
2205 '\u{1ef3}', '\u{1e84}', '\u{1e85}', '\u{1e61}', '\u{c0}', '\u{c1}', '\u{c2}', '\u{c3}',
2206 '\u{c4}', '\u{c5}', '\u{c6}', '\u{c7}', '\u{c8}', '\u{c9}', '\u{ca}', '\u{cb}', '\u{cc}',
2207 '\u{cd}', '\u{ce}', '\u{cf}', '\u{174}', '\u{d1}', '\u{d2}', '\u{d3}', '\u{d4}', '\u{d5}',
2208 '\u{d6}', '\u{1e6a}', '\u{d8}', '\u{d9}', '\u{da}', '\u{db}', '\u{dc}', '\u{dd}', '\u{176}',
2209 '\u{df}', '\u{e0}', '\u{e1}', '\u{e2}', '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{e7}',
2210 '\u{e8}', '\u{e9}', '\u{ea}', '\u{eb}', '\u{ec}', '\u{ed}', '\u{ee}', '\u{ef}', '\u{175}',
2211 '\u{f1}', '\u{f2}', '\u{f3}', '\u{f4}', '\u{f5}', '\u{f6}', '\u{1e6b}', '\u{f8}', '\u{f9}',
2212 '\u{fa}', '\u{fb}', '\u{fc}', '\u{fd}', '\u{177}', '\u{ff}',
2213];
2214
2215const UNICODE_TO_ISO_8859_14: &[(u16, u8)] = &[
2216 (128, 128),
2217 (129, 129),
2218 (130, 130),
2219 (131, 131),
2220 (132, 132),
2221 (133, 133),
2222 (134, 134),
2223 (135, 135),
2224 (136, 136),
2225 (137, 137),
2226 (138, 138),
2227 (139, 139),
2228 (140, 140),
2229 (141, 141),
2230 (142, 142),
2231 (143, 143),
2232 (144, 144),
2233 (145, 145),
2234 (146, 146),
2235 (147, 147),
2236 (148, 148),
2237 (149, 149),
2238 (150, 150),
2239 (151, 151),
2240 (152, 152),
2241 (153, 153),
2242 (154, 154),
2243 (155, 155),
2244 (156, 156),
2245 (157, 157),
2246 (158, 158),
2247 (159, 159),
2248 (160, 160),
2249 (163, 163),
2250 (167, 167),
2251 (169, 169),
2252 (173, 173),
2253 (174, 174),
2254 (182, 182),
2255 (192, 192),
2256 (193, 193),
2257 (194, 194),
2258 (195, 195),
2259 (196, 196),
2260 (197, 197),
2261 (198, 198),
2262 (199, 199),
2263 (200, 200),
2264 (201, 201),
2265 (202, 202),
2266 (203, 203),
2267 (204, 204),
2268 (205, 205),
2269 (206, 206),
2270 (207, 207),
2271 (209, 209),
2272 (210, 210),
2273 (211, 211),
2274 (212, 212),
2275 (213, 213),
2276 (214, 214),
2277 (216, 216),
2278 (217, 217),
2279 (218, 218),
2280 (219, 219),
2281 (220, 220),
2282 (221, 221),
2283 (223, 223),
2284 (224, 224),
2285 (225, 225),
2286 (226, 226),
2287 (227, 227),
2288 (228, 228),
2289 (229, 229),
2290 (230, 230),
2291 (231, 231),
2292 (232, 232),
2293 (233, 233),
2294 (234, 234),
2295 (235, 235),
2296 (236, 236),
2297 (237, 237),
2298 (238, 238),
2299 (239, 239),
2300 (241, 241),
2301 (242, 242),
2302 (243, 243),
2303 (244, 244),
2304 (245, 245),
2305 (246, 246),
2306 (248, 248),
2307 (249, 249),
2308 (250, 250),
2309 (251, 251),
2310 (252, 252),
2311 (253, 253),
2312 (255, 255),
2313 (266, 164),
2314 (267, 165),
2315 (288, 178),
2316 (289, 179),
2317 (372, 208),
2318 (373, 240),
2319 (374, 222),
2320 (375, 254),
2321 (376, 175),
2322 (7682, 161),
2323 (7683, 162),
2324 (7690, 166),
2325 (7691, 171),
2326 (7710, 176),
2327 (7711, 177),
2328 (7744, 180),
2329 (7745, 181),
2330 (7766, 183),
2331 (7767, 185),
2332 (7776, 187),
2333 (7777, 191),
2334 (7786, 215),
2335 (7787, 247),
2336 (7808, 168),
2337 (7809, 184),
2338 (7810, 170),
2339 (7811, 186),
2340 (7812, 189),
2341 (7813, 190),
2342 (7922, 172),
2343 (7923, 188),
2344];
2345
2346const ISO_8859_15_TO_UNICODE: [char; 128] = [
2347 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
2348 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
2349 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
2350 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{a1}', '\u{a2}', '\u{a3}',
2351 '\u{20ac}', '\u{a5}', '\u{160}', '\u{a7}', '\u{161}', '\u{a9}', '\u{aa}', '\u{ab}', '\u{ac}',
2352 '\u{ad}', '\u{ae}', '\u{af}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{17d}', '\u{b5}',
2353 '\u{b6}', '\u{b7}', '\u{17e}', '\u{b9}', '\u{ba}', '\u{bb}', '\u{152}', '\u{153}', '\u{178}',
2354 '\u{bf}', '\u{c0}', '\u{c1}', '\u{c2}', '\u{c3}', '\u{c4}', '\u{c5}', '\u{c6}', '\u{c7}',
2355 '\u{c8}', '\u{c9}', '\u{ca}', '\u{cb}', '\u{cc}', '\u{cd}', '\u{ce}', '\u{cf}', '\u{d0}',
2356 '\u{d1}', '\u{d2}', '\u{d3}', '\u{d4}', '\u{d5}', '\u{d6}', '\u{d7}', '\u{d8}', '\u{d9}',
2357 '\u{da}', '\u{db}', '\u{dc}', '\u{dd}', '\u{de}', '\u{df}', '\u{e0}', '\u{e1}', '\u{e2}',
2358 '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{e7}', '\u{e8}', '\u{e9}', '\u{ea}', '\u{eb}',
2359 '\u{ec}', '\u{ed}', '\u{ee}', '\u{ef}', '\u{f0}', '\u{f1}', '\u{f2}', '\u{f3}', '\u{f4}',
2360 '\u{f5}', '\u{f6}', '\u{f7}', '\u{f8}', '\u{f9}', '\u{fa}', '\u{fb}', '\u{fc}', '\u{fd}',
2361 '\u{fe}', '\u{ff}',
2362];
2363
2364const UNICODE_TO_ISO_8859_15: &[(u16, u8)] = &[
2365 (128, 128),
2366 (129, 129),
2367 (130, 130),
2368 (131, 131),
2369 (132, 132),
2370 (133, 133),
2371 (134, 134),
2372 (135, 135),
2373 (136, 136),
2374 (137, 137),
2375 (138, 138),
2376 (139, 139),
2377 (140, 140),
2378 (141, 141),
2379 (142, 142),
2380 (143, 143),
2381 (144, 144),
2382 (145, 145),
2383 (146, 146),
2384 (147, 147),
2385 (148, 148),
2386 (149, 149),
2387 (150, 150),
2388 (151, 151),
2389 (152, 152),
2390 (153, 153),
2391 (154, 154),
2392 (155, 155),
2393 (156, 156),
2394 (157, 157),
2395 (158, 158),
2396 (159, 159),
2397 (160, 160),
2398 (161, 161),
2399 (162, 162),
2400 (163, 163),
2401 (165, 165),
2402 (167, 167),
2403 (169, 169),
2404 (170, 170),
2405 (171, 171),
2406 (172, 172),
2407 (173, 173),
2408 (174, 174),
2409 (175, 175),
2410 (176, 176),
2411 (177, 177),
2412 (178, 178),
2413 (179, 179),
2414 (181, 181),
2415 (182, 182),
2416 (183, 183),
2417 (185, 185),
2418 (186, 186),
2419 (187, 187),
2420 (191, 191),
2421 (192, 192),
2422 (193, 193),
2423 (194, 194),
2424 (195, 195),
2425 (196, 196),
2426 (197, 197),
2427 (198, 198),
2428 (199, 199),
2429 (200, 200),
2430 (201, 201),
2431 (202, 202),
2432 (203, 203),
2433 (204, 204),
2434 (205, 205),
2435 (206, 206),
2436 (207, 207),
2437 (208, 208),
2438 (209, 209),
2439 (210, 210),
2440 (211, 211),
2441 (212, 212),
2442 (213, 213),
2443 (214, 214),
2444 (215, 215),
2445 (216, 216),
2446 (217, 217),
2447 (218, 218),
2448 (219, 219),
2449 (220, 220),
2450 (221, 221),
2451 (222, 222),
2452 (223, 223),
2453 (224, 224),
2454 (225, 225),
2455 (226, 226),
2456 (227, 227),
2457 (228, 228),
2458 (229, 229),
2459 (230, 230),
2460 (231, 231),
2461 (232, 232),
2462 (233, 233),
2463 (234, 234),
2464 (235, 235),
2465 (236, 236),
2466 (237, 237),
2467 (238, 238),
2468 (239, 239),
2469 (240, 240),
2470 (241, 241),
2471 (242, 242),
2472 (243, 243),
2473 (244, 244),
2474 (245, 245),
2475 (246, 246),
2476 (247, 247),
2477 (248, 248),
2478 (249, 249),
2479 (250, 250),
2480 (251, 251),
2481 (252, 252),
2482 (253, 253),
2483 (254, 254),
2484 (255, 255),
2485 (338, 188),
2486 (339, 189),
2487 (352, 166),
2488 (353, 168),
2489 (376, 190),
2490 (381, 180),
2491 (382, 184),
2492 (8364, 164),
2493];
2494
2495const ISO_8859_16_TO_UNICODE: [char; 128] = [
2496 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}',
2497 '\u{89}', '\u{8a}', '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}',
2498 '\u{92}', '\u{93}', '\u{94}', '\u{95}', '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}',
2499 '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}', '\u{104}', '\u{105}', '\u{141}',
2500 '\u{20ac}', '\u{201e}', '\u{160}', '\u{a7}', '\u{161}', '\u{a9}', '\u{218}', '\u{ab}',
2501 '\u{179}', '\u{ad}', '\u{17a}', '\u{17b}', '\u{b0}', '\u{b1}', '\u{10c}', '\u{142}', '\u{17d}',
2502 '\u{201d}', '\u{b6}', '\u{b7}', '\u{17e}', '\u{10d}', '\u{219}', '\u{bb}', '\u{152}',
2503 '\u{153}', '\u{178}', '\u{17c}', '\u{c0}', '\u{c1}', '\u{c2}', '\u{102}', '\u{c4}', '\u{106}',
2504 '\u{c6}', '\u{c7}', '\u{c8}', '\u{c9}', '\u{ca}', '\u{cb}', '\u{cc}', '\u{cd}', '\u{ce}',
2505 '\u{cf}', '\u{110}', '\u{143}', '\u{d2}', '\u{d3}', '\u{d4}', '\u{150}', '\u{d6}', '\u{15a}',
2506 '\u{170}', '\u{d9}', '\u{da}', '\u{db}', '\u{dc}', '\u{118}', '\u{21a}', '\u{df}', '\u{e0}',
2507 '\u{e1}', '\u{e2}', '\u{103}', '\u{e4}', '\u{107}', '\u{e6}', '\u{e7}', '\u{e8}', '\u{e9}',
2508 '\u{ea}', '\u{eb}', '\u{ec}', '\u{ed}', '\u{ee}', '\u{ef}', '\u{111}', '\u{144}', '\u{f2}',
2509 '\u{f3}', '\u{f4}', '\u{151}', '\u{f6}', '\u{15b}', '\u{171}', '\u{f9}', '\u{fa}', '\u{fb}',
2510 '\u{fc}', '\u{119}', '\u{21b}', '\u{ff}',
2511];
2512
2513const UNICODE_TO_ISO_8859_16: &[(u16, u8)] = &[
2514 (128, 128),
2515 (129, 129),
2516 (130, 130),
2517 (131, 131),
2518 (132, 132),
2519 (133, 133),
2520 (134, 134),
2521 (135, 135),
2522 (136, 136),
2523 (137, 137),
2524 (138, 138),
2525 (139, 139),
2526 (140, 140),
2527 (141, 141),
2528 (142, 142),
2529 (143, 143),
2530 (144, 144),
2531 (145, 145),
2532 (146, 146),
2533 (147, 147),
2534 (148, 148),
2535 (149, 149),
2536 (150, 150),
2537 (151, 151),
2538 (152, 152),
2539 (153, 153),
2540 (154, 154),
2541 (155, 155),
2542 (156, 156),
2543 (157, 157),
2544 (158, 158),
2545 (159, 159),
2546 (160, 160),
2547 (167, 167),
2548 (169, 169),
2549 (171, 171),
2550 (173, 173),
2551 (176, 176),
2552 (177, 177),
2553 (182, 182),
2554 (183, 183),
2555 (187, 187),
2556 (192, 192),
2557 (193, 193),
2558 (194, 194),
2559 (196, 196),
2560 (198, 198),
2561 (199, 199),
2562 (200, 200),
2563 (201, 201),
2564 (202, 202),
2565 (203, 203),
2566 (204, 204),
2567 (205, 205),
2568 (206, 206),
2569 (207, 207),
2570 (210, 210),
2571 (211, 211),
2572 (212, 212),
2573 (214, 214),
2574 (217, 217),
2575 (218, 218),
2576 (219, 219),
2577 (220, 220),
2578 (223, 223),
2579 (224, 224),
2580 (225, 225),
2581 (226, 226),
2582 (228, 228),
2583 (230, 230),
2584 (231, 231),
2585 (232, 232),
2586 (233, 233),
2587 (234, 234),
2588 (235, 235),
2589 (236, 236),
2590 (237, 237),
2591 (238, 238),
2592 (239, 239),
2593 (242, 242),
2594 (243, 243),
2595 (244, 244),
2596 (246, 246),
2597 (249, 249),
2598 (250, 250),
2599 (251, 251),
2600 (252, 252),
2601 (255, 255),
2602 (258, 195),
2603 (259, 227),
2604 (260, 161),
2605 (261, 162),
2606 (262, 197),
2607 (263, 229),
2608 (268, 178),
2609 (269, 185),
2610 (272, 208),
2611 (273, 240),
2612 (280, 221),
2613 (281, 253),
2614 (321, 163),
2615 (322, 179),
2616 (323, 209),
2617 (324, 241),
2618 (336, 213),
2619 (337, 245),
2620 (338, 188),
2621 (339, 189),
2622 (346, 215),
2623 (347, 247),
2624 (352, 166),
2625 (353, 168),
2626 (368, 216),
2627 (369, 248),
2628 (376, 190),
2629 (377, 172),
2630 (378, 174),
2631 (379, 175),
2632 (380, 191),
2633 (381, 180),
2634 (382, 184),
2635 (536, 170),
2636 (537, 186),
2637 (538, 222),
2638 (539, 254),
2639 (8221, 181),
2640 (8222, 165),
2641 (8364, 164),
2642];
2643
2644macro_rules! impl_iso8859_encoder_and_decoder {
2645 ( $name:ident, $namelit:literal, $docname:literal, $encoder:ident, $decoder:ident, $etable:ident, $dtable:ident ) => {
2646 #[doc = concat!("Encoding name for ", $docname, ".")]
2647 pub const $name: &str = $namelit;
2648 #[doc = concat!("Encoder for ", $docname, ".")]
2649 pub struct $encoder;
2650 impl Encoder for $encoder {
2651 fn name(&self) -> &'static str {
2652 $name
2653 }
2654
2655 fn encode(
2656 &mut self,
2657 src: &str,
2658 dst: &mut [u8],
2659 finish: bool,
2660 ) -> Result<(usize, usize), EncodeError> {
2661 if src.is_empty() {
2662 return if finish {
2663 Ok((0, 0))
2664 } else {
2665 Err(EncodeError::InputIsEmpty)
2666 };
2667 }
2668
2669 if dst.is_empty() {
2670 return Err(EncodeError::OutputTooShort);
2671 }
2672
2673 let (mut read, mut write) = (0, 0);
2674 for c in src.chars() {
2675 let b = c as u32;
2676 read += c.len_utf8();
2677 if b < 128 {
2678 dst[write] = b as u8;
2679 } else if let Ok(pos) = $etable.binary_search_by_key(&b, |k| k.0 as u32) {
2680 dst[write] = $etable[pos].1;
2681 } else {
2682 return Err(EncodeError::Unmappable { read, write, c });
2683 }
2684 write += 1;
2685 if write == dst.len() {
2686 break;
2687 }
2688 }
2689 Ok((read, write))
2690 }
2691 }
2692
2693 #[doc = concat!("Decoder for ", $docname, ".")]
2694 pub struct $decoder;
2695 impl Decoder for $decoder {
2696 fn name(&self) -> &'static str {
2697 $name
2698 }
2699
2700 fn decode(
2701 &mut self,
2702 src: &[u8],
2703 dst: &mut String,
2704 finish: bool,
2705 ) -> Result<(usize, usize), DecodeError> {
2706 if src.is_empty() {
2707 return if finish {
2708 Ok((0, 0))
2709 } else {
2710 Err(DecodeError::InputIsEmpty)
2711 };
2712 }
2713 let len = dst.capacity() - dst.len();
2714 if len < 4 {
2715 return Err(DecodeError::OutputTooShort);
2716 }
2717
2718 let (mut read, mut write) = (0, 0);
2719 for &b in src {
2720 let c = if b < 128 {
2721 b as char
2722 } else {
2723 $dtable[b as usize - 128]
2724 };
2725 let l = c.len_utf8();
2726 if write + l > len {
2727 break;
2728 }
2729 read += 1;
2730 if c == char::REPLACEMENT_CHARACTER {
2731 return Err(DecodeError::Malformed {
2732 read,
2733 write,
2734 length: 1,
2735 offset: 0,
2736 });
2737 }
2738 dst.push(c);
2739 write += l;
2740 }
2741 Ok((read, write))
2742 }
2743 }
2744 };
2745}
2746
2747impl_iso8859_encoder_and_decoder!(
2748 ISO_8859_2_NAME,
2749 "ISO_8859-2:1987",
2750 "ISO_8859-2",
2751 ISO8859_2Encoder,
2752 ISO8859_2Decoder,
2753 UNICODE_TO_ISO_8859_2,
2754 ISO_8859_2_TO_UNICODE
2755);
2756impl_iso8859_encoder_and_decoder!(
2757 ISO_8859_3_NAME,
2758 "ISO_8859-3:1988",
2759 "ISO_8859-3",
2760 ISO8859_3Encoder,
2761 ISO8859_3Decoder,
2762 UNICODE_TO_ISO_8859_3,
2763 ISO_8859_3_TO_UNICODE
2764);
2765impl_iso8859_encoder_and_decoder!(
2766 ISO_8859_4_NAME,
2767 "ISO_8859-4:1988",
2768 "ISO_8859-4",
2769 ISO8859_4Encoder,
2770 ISO8859_4Decoder,
2771 UNICODE_TO_ISO_8859_4,
2772 ISO_8859_4_TO_UNICODE
2773);
2774impl_iso8859_encoder_and_decoder!(
2775 ISO_8859_5_NAME,
2776 "ISO_8859-5:1988",
2777 "ISO_8859-5",
2778 ISO8859_5Encoder,
2779 ISO8859_5Decoder,
2780 UNICODE_TO_ISO_8859_5,
2781 ISO_8859_5_TO_UNICODE
2782);
2783impl_iso8859_encoder_and_decoder!(
2784 ISO_8859_6_NAME,
2785 "ISO_8859-6:1987",
2786 "ISO_8859-6",
2787 ISO8859_6Encoder,
2788 ISO8859_6Decoder,
2789 UNICODE_TO_ISO_8859_6,
2790 ISO_8859_6_TO_UNICODE
2791);
2792impl_iso8859_encoder_and_decoder!(
2793 ISO_8859_7_NAME,
2794 "ISO_8859-7:1987",
2795 "ISO_8859-7",
2796 ISO8859_7Encoder,
2797 ISO8859_7Decoder,
2798 UNICODE_TO_ISO_8859_7,
2799 ISO_8859_7_TO_UNICODE
2800);
2801impl_iso8859_encoder_and_decoder!(
2802 ISO_8859_8_NAME,
2803 "ISO_8859-8:1988",
2804 "ISO_8859-8",
2805 ISO8859_8Encoder,
2806 ISO8859_8Decoder,
2807 UNICODE_TO_ISO_8859_8,
2808 ISO_8859_8_TO_UNICODE
2809);
2810impl_iso8859_encoder_and_decoder!(
2811 ISO_8859_9_NAME,
2812 "ISO_8859-9:1989",
2813 "ISO_8859-9",
2814 ISO8859_9Encoder,
2815 ISO8859_9Decoder,
2816 UNICODE_TO_ISO_8859_9,
2817 ISO_8859_9_TO_UNICODE
2818);
2819impl_iso8859_encoder_and_decoder!(
2820 ISO_8859_10_NAME,
2821 "ISO-8859-10",
2822 "ISO-8859-10",
2823 ISO8859_10Encoder,
2824 ISO8859_10Decoder,
2825 UNICODE_TO_ISO_8859_10,
2826 ISO_8859_10_TO_UNICODE
2827);
2828impl_iso8859_encoder_and_decoder!(
2829 ISO_8859_11_NAME,
2830 "TIS-620",
2831 "ISO-8859-11",
2832 ISO8859_11Encoder,
2833 ISO8859_11Decoder,
2834 UNICODE_TO_ISO_8859_11,
2835 ISO_8859_11_TO_UNICODE
2836);
2837impl_iso8859_encoder_and_decoder!(
2838 ISO_8859_13_NAME,
2839 "ISO-8859-13",
2840 "ISO-8859-13",
2841 ISO8859_13Encoder,
2842 ISO8859_13Decoder,
2843 UNICODE_TO_ISO_8859_13,
2844 ISO_8859_13_TO_UNICODE
2845);
2846impl_iso8859_encoder_and_decoder!(
2847 ISO_8859_14_NAME,
2848 "ISO-8859-14",
2849 "ISO-8859-14",
2850 ISO8859_14Encoder,
2851 ISO8859_14Decoder,
2852 UNICODE_TO_ISO_8859_14,
2853 ISO_8859_14_TO_UNICODE
2854);
2855impl_iso8859_encoder_and_decoder!(
2856 ISO_8859_15_NAME,
2857 "ISO-8859-15",
2858 "ISO-8859-15",
2859 ISO8859_15Encoder,
2860 ISO8859_15Decoder,
2861 UNICODE_TO_ISO_8859_15,
2862 ISO_8859_15_TO_UNICODE
2863);
2864impl_iso8859_encoder_and_decoder!(
2865 ISO_8859_16_NAME,
2866 "ISO-8859-16",
2867 "ISO-8859-16",
2868 ISO8859_16Encoder,
2869 ISO8859_16Decoder,
2870 UNICODE_TO_ISO_8859_16,
2871 ISO_8859_16_TO_UNICODE
2872);