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