1use std::borrow::Cow;
4use crate::{
5 decoder::{self, complete::decode_helper, CompleteEntry},
6 encoder::Encoder, CodePage, DecodeError, EncodeError,
7};
8#[derive(Copy, Clone)]
9pub struct CP737;
10impl CP737 {
11 #[inline(always)]
21 pub fn decode(self, bytes: &[u8]) -> Cow<'_, str> {
22 decode_helper(&DECODE_TABLE, bytes)
23 }
24 #[inline(always)]
38 pub fn encode(self, s: &str) -> Result<Cow<'_, [u8]>, EncodeError> {
39 self.encode_helper(s, None)
40 }
41 #[inline(always)]
53 pub fn encode_lossy(self, s: &str, fallback: u8) -> Cow<'_, [u8]> {
54 self.encode_helper(s, Some(fallback)).unwrap()
55 }
56}
57impl CodePage for CP737 {
58 #[inline(always)]
59 fn decode<'a>(&self, bytes: &'a [u8]) -> Result<Cow<'a, str>, DecodeError> {
60 Ok((*self).decode(bytes))
61 }
62}
63const DECODE_TABLE: decoder::complete::Table = [
64 CompleteEntry {
65 buf: [0x00, 0x00, 0x00],
66 len: 1,
67 },
68 CompleteEntry {
69 buf: [0x01, 0x00, 0x00],
70 len: 1,
71 },
72 CompleteEntry {
73 buf: [0x02, 0x00, 0x00],
74 len: 1,
75 },
76 CompleteEntry {
77 buf: [0x03, 0x00, 0x00],
78 len: 1,
79 },
80 CompleteEntry {
81 buf: [0x04, 0x00, 0x00],
82 len: 1,
83 },
84 CompleteEntry {
85 buf: [0x05, 0x00, 0x00],
86 len: 1,
87 },
88 CompleteEntry {
89 buf: [0x06, 0x00, 0x00],
90 len: 1,
91 },
92 CompleteEntry {
93 buf: [0x07, 0x00, 0x00],
94 len: 1,
95 },
96 CompleteEntry {
97 buf: [0x08, 0x00, 0x00],
98 len: 1,
99 },
100 CompleteEntry {
101 buf: [0x09, 0x00, 0x00],
102 len: 1,
103 },
104 CompleteEntry {
105 buf: [0x0A, 0x00, 0x00],
106 len: 1,
107 },
108 CompleteEntry {
109 buf: [0x0B, 0x00, 0x00],
110 len: 1,
111 },
112 CompleteEntry {
113 buf: [0x0C, 0x00, 0x00],
114 len: 1,
115 },
116 CompleteEntry {
117 buf: [0x0D, 0x00, 0x00],
118 len: 1,
119 },
120 CompleteEntry {
121 buf: [0x0E, 0x00, 0x00],
122 len: 1,
123 },
124 CompleteEntry {
125 buf: [0x0F, 0x00, 0x00],
126 len: 1,
127 },
128 CompleteEntry {
129 buf: [0x10, 0x00, 0x00],
130 len: 1,
131 },
132 CompleteEntry {
133 buf: [0x11, 0x00, 0x00],
134 len: 1,
135 },
136 CompleteEntry {
137 buf: [0x12, 0x00, 0x00],
138 len: 1,
139 },
140 CompleteEntry {
141 buf: [0x13, 0x00, 0x00],
142 len: 1,
143 },
144 CompleteEntry {
145 buf: [0x14, 0x00, 0x00],
146 len: 1,
147 },
148 CompleteEntry {
149 buf: [0x15, 0x00, 0x00],
150 len: 1,
151 },
152 CompleteEntry {
153 buf: [0x16, 0x00, 0x00],
154 len: 1,
155 },
156 CompleteEntry {
157 buf: [0x17, 0x00, 0x00],
158 len: 1,
159 },
160 CompleteEntry {
161 buf: [0x18, 0x00, 0x00],
162 len: 1,
163 },
164 CompleteEntry {
165 buf: [0x19, 0x00, 0x00],
166 len: 1,
167 },
168 CompleteEntry {
169 buf: [0x1A, 0x00, 0x00],
170 len: 1,
171 },
172 CompleteEntry {
173 buf: [0x1B, 0x00, 0x00],
174 len: 1,
175 },
176 CompleteEntry {
177 buf: [0x1C, 0x00, 0x00],
178 len: 1,
179 },
180 CompleteEntry {
181 buf: [0x1D, 0x00, 0x00],
182 len: 1,
183 },
184 CompleteEntry {
185 buf: [0x1E, 0x00, 0x00],
186 len: 1,
187 },
188 CompleteEntry {
189 buf: [0x1F, 0x00, 0x00],
190 len: 1,
191 },
192 CompleteEntry {
193 buf: [0x20, 0x00, 0x00],
194 len: 1,
195 },
196 CompleteEntry {
197 buf: [0x21, 0x00, 0x00],
198 len: 1,
199 },
200 CompleteEntry {
201 buf: [0x22, 0x00, 0x00],
202 len: 1,
203 },
204 CompleteEntry {
205 buf: [0x23, 0x00, 0x00],
206 len: 1,
207 },
208 CompleteEntry {
209 buf: [0x24, 0x00, 0x00],
210 len: 1,
211 },
212 CompleteEntry {
213 buf: [0x25, 0x00, 0x00],
214 len: 1,
215 },
216 CompleteEntry {
217 buf: [0x26, 0x00, 0x00],
218 len: 1,
219 },
220 CompleteEntry {
221 buf: [0x27, 0x00, 0x00],
222 len: 1,
223 },
224 CompleteEntry {
225 buf: [0x28, 0x00, 0x00],
226 len: 1,
227 },
228 CompleteEntry {
229 buf: [0x29, 0x00, 0x00],
230 len: 1,
231 },
232 CompleteEntry {
233 buf: [0x2A, 0x00, 0x00],
234 len: 1,
235 },
236 CompleteEntry {
237 buf: [0x2B, 0x00, 0x00],
238 len: 1,
239 },
240 CompleteEntry {
241 buf: [0x2C, 0x00, 0x00],
242 len: 1,
243 },
244 CompleteEntry {
245 buf: [0x2D, 0x00, 0x00],
246 len: 1,
247 },
248 CompleteEntry {
249 buf: [0x2E, 0x00, 0x00],
250 len: 1,
251 },
252 CompleteEntry {
253 buf: [0x2F, 0x00, 0x00],
254 len: 1,
255 },
256 CompleteEntry {
257 buf: [0x30, 0x00, 0x00],
258 len: 1,
259 },
260 CompleteEntry {
261 buf: [0x31, 0x00, 0x00],
262 len: 1,
263 },
264 CompleteEntry {
265 buf: [0x32, 0x00, 0x00],
266 len: 1,
267 },
268 CompleteEntry {
269 buf: [0x33, 0x00, 0x00],
270 len: 1,
271 },
272 CompleteEntry {
273 buf: [0x34, 0x00, 0x00],
274 len: 1,
275 },
276 CompleteEntry {
277 buf: [0x35, 0x00, 0x00],
278 len: 1,
279 },
280 CompleteEntry {
281 buf: [0x36, 0x00, 0x00],
282 len: 1,
283 },
284 CompleteEntry {
285 buf: [0x37, 0x00, 0x00],
286 len: 1,
287 },
288 CompleteEntry {
289 buf: [0x38, 0x00, 0x00],
290 len: 1,
291 },
292 CompleteEntry {
293 buf: [0x39, 0x00, 0x00],
294 len: 1,
295 },
296 CompleteEntry {
297 buf: [0x3A, 0x00, 0x00],
298 len: 1,
299 },
300 CompleteEntry {
301 buf: [0x3B, 0x00, 0x00],
302 len: 1,
303 },
304 CompleteEntry {
305 buf: [0x3C, 0x00, 0x00],
306 len: 1,
307 },
308 CompleteEntry {
309 buf: [0x3D, 0x00, 0x00],
310 len: 1,
311 },
312 CompleteEntry {
313 buf: [0x3E, 0x00, 0x00],
314 len: 1,
315 },
316 CompleteEntry {
317 buf: [0x3F, 0x00, 0x00],
318 len: 1,
319 },
320 CompleteEntry {
321 buf: [0x40, 0x00, 0x00],
322 len: 1,
323 },
324 CompleteEntry {
325 buf: [0x41, 0x00, 0x00],
326 len: 1,
327 },
328 CompleteEntry {
329 buf: [0x42, 0x00, 0x00],
330 len: 1,
331 },
332 CompleteEntry {
333 buf: [0x43, 0x00, 0x00],
334 len: 1,
335 },
336 CompleteEntry {
337 buf: [0x44, 0x00, 0x00],
338 len: 1,
339 },
340 CompleteEntry {
341 buf: [0x45, 0x00, 0x00],
342 len: 1,
343 },
344 CompleteEntry {
345 buf: [0x46, 0x00, 0x00],
346 len: 1,
347 },
348 CompleteEntry {
349 buf: [0x47, 0x00, 0x00],
350 len: 1,
351 },
352 CompleteEntry {
353 buf: [0x48, 0x00, 0x00],
354 len: 1,
355 },
356 CompleteEntry {
357 buf: [0x49, 0x00, 0x00],
358 len: 1,
359 },
360 CompleteEntry {
361 buf: [0x4A, 0x00, 0x00],
362 len: 1,
363 },
364 CompleteEntry {
365 buf: [0x4B, 0x00, 0x00],
366 len: 1,
367 },
368 CompleteEntry {
369 buf: [0x4C, 0x00, 0x00],
370 len: 1,
371 },
372 CompleteEntry {
373 buf: [0x4D, 0x00, 0x00],
374 len: 1,
375 },
376 CompleteEntry {
377 buf: [0x4E, 0x00, 0x00],
378 len: 1,
379 },
380 CompleteEntry {
381 buf: [0x4F, 0x00, 0x00],
382 len: 1,
383 },
384 CompleteEntry {
385 buf: [0x50, 0x00, 0x00],
386 len: 1,
387 },
388 CompleteEntry {
389 buf: [0x51, 0x00, 0x00],
390 len: 1,
391 },
392 CompleteEntry {
393 buf: [0x52, 0x00, 0x00],
394 len: 1,
395 },
396 CompleteEntry {
397 buf: [0x53, 0x00, 0x00],
398 len: 1,
399 },
400 CompleteEntry {
401 buf: [0x54, 0x00, 0x00],
402 len: 1,
403 },
404 CompleteEntry {
405 buf: [0x55, 0x00, 0x00],
406 len: 1,
407 },
408 CompleteEntry {
409 buf: [0x56, 0x00, 0x00],
410 len: 1,
411 },
412 CompleteEntry {
413 buf: [0x57, 0x00, 0x00],
414 len: 1,
415 },
416 CompleteEntry {
417 buf: [0x58, 0x00, 0x00],
418 len: 1,
419 },
420 CompleteEntry {
421 buf: [0x59, 0x00, 0x00],
422 len: 1,
423 },
424 CompleteEntry {
425 buf: [0x5A, 0x00, 0x00],
426 len: 1,
427 },
428 CompleteEntry {
429 buf: [0x5B, 0x00, 0x00],
430 len: 1,
431 },
432 CompleteEntry {
433 buf: [0x5C, 0x00, 0x00],
434 len: 1,
435 },
436 CompleteEntry {
437 buf: [0x5D, 0x00, 0x00],
438 len: 1,
439 },
440 CompleteEntry {
441 buf: [0x5E, 0x00, 0x00],
442 len: 1,
443 },
444 CompleteEntry {
445 buf: [0x5F, 0x00, 0x00],
446 len: 1,
447 },
448 CompleteEntry {
449 buf: [0x60, 0x00, 0x00],
450 len: 1,
451 },
452 CompleteEntry {
453 buf: [0x61, 0x00, 0x00],
454 len: 1,
455 },
456 CompleteEntry {
457 buf: [0x62, 0x00, 0x00],
458 len: 1,
459 },
460 CompleteEntry {
461 buf: [0x63, 0x00, 0x00],
462 len: 1,
463 },
464 CompleteEntry {
465 buf: [0x64, 0x00, 0x00],
466 len: 1,
467 },
468 CompleteEntry {
469 buf: [0x65, 0x00, 0x00],
470 len: 1,
471 },
472 CompleteEntry {
473 buf: [0x66, 0x00, 0x00],
474 len: 1,
475 },
476 CompleteEntry {
477 buf: [0x67, 0x00, 0x00],
478 len: 1,
479 },
480 CompleteEntry {
481 buf: [0x68, 0x00, 0x00],
482 len: 1,
483 },
484 CompleteEntry {
485 buf: [0x69, 0x00, 0x00],
486 len: 1,
487 },
488 CompleteEntry {
489 buf: [0x6A, 0x00, 0x00],
490 len: 1,
491 },
492 CompleteEntry {
493 buf: [0x6B, 0x00, 0x00],
494 len: 1,
495 },
496 CompleteEntry {
497 buf: [0x6C, 0x00, 0x00],
498 len: 1,
499 },
500 CompleteEntry {
501 buf: [0x6D, 0x00, 0x00],
502 len: 1,
503 },
504 CompleteEntry {
505 buf: [0x6E, 0x00, 0x00],
506 len: 1,
507 },
508 CompleteEntry {
509 buf: [0x6F, 0x00, 0x00],
510 len: 1,
511 },
512 CompleteEntry {
513 buf: [0x70, 0x00, 0x00],
514 len: 1,
515 },
516 CompleteEntry {
517 buf: [0x71, 0x00, 0x00],
518 len: 1,
519 },
520 CompleteEntry {
521 buf: [0x72, 0x00, 0x00],
522 len: 1,
523 },
524 CompleteEntry {
525 buf: [0x73, 0x00, 0x00],
526 len: 1,
527 },
528 CompleteEntry {
529 buf: [0x74, 0x00, 0x00],
530 len: 1,
531 },
532 CompleteEntry {
533 buf: [0x75, 0x00, 0x00],
534 len: 1,
535 },
536 CompleteEntry {
537 buf: [0x76, 0x00, 0x00],
538 len: 1,
539 },
540 CompleteEntry {
541 buf: [0x77, 0x00, 0x00],
542 len: 1,
543 },
544 CompleteEntry {
545 buf: [0x78, 0x00, 0x00],
546 len: 1,
547 },
548 CompleteEntry {
549 buf: [0x79, 0x00, 0x00],
550 len: 1,
551 },
552 CompleteEntry {
553 buf: [0x7A, 0x00, 0x00],
554 len: 1,
555 },
556 CompleteEntry {
557 buf: [0x7B, 0x00, 0x00],
558 len: 1,
559 },
560 CompleteEntry {
561 buf: [0x7C, 0x00, 0x00],
562 len: 1,
563 },
564 CompleteEntry {
565 buf: [0x7D, 0x00, 0x00],
566 len: 1,
567 },
568 CompleteEntry {
569 buf: [0x7E, 0x00, 0x00],
570 len: 1,
571 },
572 CompleteEntry {
573 buf: [0x7F, 0x00, 0x00],
574 len: 1,
575 },
576 CompleteEntry {
577 buf: [0xCE, 0x91, 0x00],
578 len: 2,
579 },
580 CompleteEntry {
581 buf: [0xCE, 0x92, 0x00],
582 len: 2,
583 },
584 CompleteEntry {
585 buf: [0xCE, 0x93, 0x00],
586 len: 2,
587 },
588 CompleteEntry {
589 buf: [0xCE, 0x94, 0x00],
590 len: 2,
591 },
592 CompleteEntry {
593 buf: [0xCE, 0x95, 0x00],
594 len: 2,
595 },
596 CompleteEntry {
597 buf: [0xCE, 0x96, 0x00],
598 len: 2,
599 },
600 CompleteEntry {
601 buf: [0xCE, 0x97, 0x00],
602 len: 2,
603 },
604 CompleteEntry {
605 buf: [0xCE, 0x98, 0x00],
606 len: 2,
607 },
608 CompleteEntry {
609 buf: [0xCE, 0x99, 0x00],
610 len: 2,
611 },
612 CompleteEntry {
613 buf: [0xCE, 0x9A, 0x00],
614 len: 2,
615 },
616 CompleteEntry {
617 buf: [0xCE, 0x9B, 0x00],
618 len: 2,
619 },
620 CompleteEntry {
621 buf: [0xCE, 0x9C, 0x00],
622 len: 2,
623 },
624 CompleteEntry {
625 buf: [0xCE, 0x9D, 0x00],
626 len: 2,
627 },
628 CompleteEntry {
629 buf: [0xCE, 0x9E, 0x00],
630 len: 2,
631 },
632 CompleteEntry {
633 buf: [0xCE, 0x9F, 0x00],
634 len: 2,
635 },
636 CompleteEntry {
637 buf: [0xCE, 0xA0, 0x00],
638 len: 2,
639 },
640 CompleteEntry {
641 buf: [0xCE, 0xA1, 0x00],
642 len: 2,
643 },
644 CompleteEntry {
645 buf: [0xCE, 0xA3, 0x00],
646 len: 2,
647 },
648 CompleteEntry {
649 buf: [0xCE, 0xA4, 0x00],
650 len: 2,
651 },
652 CompleteEntry {
653 buf: [0xCE, 0xA5, 0x00],
654 len: 2,
655 },
656 CompleteEntry {
657 buf: [0xCE, 0xA6, 0x00],
658 len: 2,
659 },
660 CompleteEntry {
661 buf: [0xCE, 0xA7, 0x00],
662 len: 2,
663 },
664 CompleteEntry {
665 buf: [0xCE, 0xA8, 0x00],
666 len: 2,
667 },
668 CompleteEntry {
669 buf: [0xCE, 0xA9, 0x00],
670 len: 2,
671 },
672 CompleteEntry {
673 buf: [0xCE, 0xB1, 0x00],
674 len: 2,
675 },
676 CompleteEntry {
677 buf: [0xCE, 0xB2, 0x00],
678 len: 2,
679 },
680 CompleteEntry {
681 buf: [0xCE, 0xB3, 0x00],
682 len: 2,
683 },
684 CompleteEntry {
685 buf: [0xCE, 0xB4, 0x00],
686 len: 2,
687 },
688 CompleteEntry {
689 buf: [0xCE, 0xB5, 0x00],
690 len: 2,
691 },
692 CompleteEntry {
693 buf: [0xCE, 0xB6, 0x00],
694 len: 2,
695 },
696 CompleteEntry {
697 buf: [0xCE, 0xB7, 0x00],
698 len: 2,
699 },
700 CompleteEntry {
701 buf: [0xCE, 0xB8, 0x00],
702 len: 2,
703 },
704 CompleteEntry {
705 buf: [0xCE, 0xB9, 0x00],
706 len: 2,
707 },
708 CompleteEntry {
709 buf: [0xCE, 0xBA, 0x00],
710 len: 2,
711 },
712 CompleteEntry {
713 buf: [0xCE, 0xBB, 0x00],
714 len: 2,
715 },
716 CompleteEntry {
717 buf: [0xCE, 0xBC, 0x00],
718 len: 2,
719 },
720 CompleteEntry {
721 buf: [0xCE, 0xBD, 0x00],
722 len: 2,
723 },
724 CompleteEntry {
725 buf: [0xCE, 0xBE, 0x00],
726 len: 2,
727 },
728 CompleteEntry {
729 buf: [0xCE, 0xBF, 0x00],
730 len: 2,
731 },
732 CompleteEntry {
733 buf: [0xCF, 0x80, 0x00],
734 len: 2,
735 },
736 CompleteEntry {
737 buf: [0xCF, 0x81, 0x00],
738 len: 2,
739 },
740 CompleteEntry {
741 buf: [0xCF, 0x83, 0x00],
742 len: 2,
743 },
744 CompleteEntry {
745 buf: [0xCF, 0x82, 0x00],
746 len: 2,
747 },
748 CompleteEntry {
749 buf: [0xCF, 0x84, 0x00],
750 len: 2,
751 },
752 CompleteEntry {
753 buf: [0xCF, 0x85, 0x00],
754 len: 2,
755 },
756 CompleteEntry {
757 buf: [0xCF, 0x86, 0x00],
758 len: 2,
759 },
760 CompleteEntry {
761 buf: [0xCF, 0x87, 0x00],
762 len: 2,
763 },
764 CompleteEntry {
765 buf: [0xCF, 0x88, 0x00],
766 len: 2,
767 },
768 CompleteEntry {
769 buf: [0xE2, 0x96, 0x91],
770 len: 3,
771 },
772 CompleteEntry {
773 buf: [0xE2, 0x96, 0x92],
774 len: 3,
775 },
776 CompleteEntry {
777 buf: [0xE2, 0x96, 0x93],
778 len: 3,
779 },
780 CompleteEntry {
781 buf: [0xE2, 0x94, 0x82],
782 len: 3,
783 },
784 CompleteEntry {
785 buf: [0xE2, 0x94, 0xA4],
786 len: 3,
787 },
788 CompleteEntry {
789 buf: [0xE2, 0x95, 0xA1],
790 len: 3,
791 },
792 CompleteEntry {
793 buf: [0xE2, 0x95, 0xA2],
794 len: 3,
795 },
796 CompleteEntry {
797 buf: [0xE2, 0x95, 0x96],
798 len: 3,
799 },
800 CompleteEntry {
801 buf: [0xE2, 0x95, 0x95],
802 len: 3,
803 },
804 CompleteEntry {
805 buf: [0xE2, 0x95, 0xA3],
806 len: 3,
807 },
808 CompleteEntry {
809 buf: [0xE2, 0x95, 0x91],
810 len: 3,
811 },
812 CompleteEntry {
813 buf: [0xE2, 0x95, 0x97],
814 len: 3,
815 },
816 CompleteEntry {
817 buf: [0xE2, 0x95, 0x9D],
818 len: 3,
819 },
820 CompleteEntry {
821 buf: [0xE2, 0x95, 0x9C],
822 len: 3,
823 },
824 CompleteEntry {
825 buf: [0xE2, 0x95, 0x9B],
826 len: 3,
827 },
828 CompleteEntry {
829 buf: [0xE2, 0x94, 0x90],
830 len: 3,
831 },
832 CompleteEntry {
833 buf: [0xE2, 0x94, 0x94],
834 len: 3,
835 },
836 CompleteEntry {
837 buf: [0xE2, 0x94, 0xB4],
838 len: 3,
839 },
840 CompleteEntry {
841 buf: [0xE2, 0x94, 0xAC],
842 len: 3,
843 },
844 CompleteEntry {
845 buf: [0xE2, 0x94, 0x9C],
846 len: 3,
847 },
848 CompleteEntry {
849 buf: [0xE2, 0x94, 0x80],
850 len: 3,
851 },
852 CompleteEntry {
853 buf: [0xE2, 0x94, 0xBC],
854 len: 3,
855 },
856 CompleteEntry {
857 buf: [0xE2, 0x95, 0x9E],
858 len: 3,
859 },
860 CompleteEntry {
861 buf: [0xE2, 0x95, 0x9F],
862 len: 3,
863 },
864 CompleteEntry {
865 buf: [0xE2, 0x95, 0x9A],
866 len: 3,
867 },
868 CompleteEntry {
869 buf: [0xE2, 0x95, 0x94],
870 len: 3,
871 },
872 CompleteEntry {
873 buf: [0xE2, 0x95, 0xA9],
874 len: 3,
875 },
876 CompleteEntry {
877 buf: [0xE2, 0x95, 0xA6],
878 len: 3,
879 },
880 CompleteEntry {
881 buf: [0xE2, 0x95, 0xA0],
882 len: 3,
883 },
884 CompleteEntry {
885 buf: [0xE2, 0x95, 0x90],
886 len: 3,
887 },
888 CompleteEntry {
889 buf: [0xE2, 0x95, 0xAC],
890 len: 3,
891 },
892 CompleteEntry {
893 buf: [0xE2, 0x95, 0xA7],
894 len: 3,
895 },
896 CompleteEntry {
897 buf: [0xE2, 0x95, 0xA8],
898 len: 3,
899 },
900 CompleteEntry {
901 buf: [0xE2, 0x95, 0xA4],
902 len: 3,
903 },
904 CompleteEntry {
905 buf: [0xE2, 0x95, 0xA5],
906 len: 3,
907 },
908 CompleteEntry {
909 buf: [0xE2, 0x95, 0x99],
910 len: 3,
911 },
912 CompleteEntry {
913 buf: [0xE2, 0x95, 0x98],
914 len: 3,
915 },
916 CompleteEntry {
917 buf: [0xE2, 0x95, 0x92],
918 len: 3,
919 },
920 CompleteEntry {
921 buf: [0xE2, 0x95, 0x93],
922 len: 3,
923 },
924 CompleteEntry {
925 buf: [0xE2, 0x95, 0xAB],
926 len: 3,
927 },
928 CompleteEntry {
929 buf: [0xE2, 0x95, 0xAA],
930 len: 3,
931 },
932 CompleteEntry {
933 buf: [0xE2, 0x94, 0x98],
934 len: 3,
935 },
936 CompleteEntry {
937 buf: [0xE2, 0x94, 0x8C],
938 len: 3,
939 },
940 CompleteEntry {
941 buf: [0xE2, 0x96, 0x88],
942 len: 3,
943 },
944 CompleteEntry {
945 buf: [0xE2, 0x96, 0x84],
946 len: 3,
947 },
948 CompleteEntry {
949 buf: [0xE2, 0x96, 0x8C],
950 len: 3,
951 },
952 CompleteEntry {
953 buf: [0xE2, 0x96, 0x90],
954 len: 3,
955 },
956 CompleteEntry {
957 buf: [0xE2, 0x96, 0x80],
958 len: 3,
959 },
960 CompleteEntry {
961 buf: [0xCF, 0x89, 0x00],
962 len: 2,
963 },
964 CompleteEntry {
965 buf: [0xCE, 0xAC, 0x00],
966 len: 2,
967 },
968 CompleteEntry {
969 buf: [0xCE, 0xAD, 0x00],
970 len: 2,
971 },
972 CompleteEntry {
973 buf: [0xCE, 0xAE, 0x00],
974 len: 2,
975 },
976 CompleteEntry {
977 buf: [0xCF, 0x8A, 0x00],
978 len: 2,
979 },
980 CompleteEntry {
981 buf: [0xCE, 0xAF, 0x00],
982 len: 2,
983 },
984 CompleteEntry {
985 buf: [0xCF, 0x8C, 0x00],
986 len: 2,
987 },
988 CompleteEntry {
989 buf: [0xCF, 0x8D, 0x00],
990 len: 2,
991 },
992 CompleteEntry {
993 buf: [0xCF, 0x8B, 0x00],
994 len: 2,
995 },
996 CompleteEntry {
997 buf: [0xCF, 0x8E, 0x00],
998 len: 2,
999 },
1000 CompleteEntry {
1001 buf: [0xCE, 0x86, 0x00],
1002 len: 2,
1003 },
1004 CompleteEntry {
1005 buf: [0xCE, 0x88, 0x00],
1006 len: 2,
1007 },
1008 CompleteEntry {
1009 buf: [0xCE, 0x89, 0x00],
1010 len: 2,
1011 },
1012 CompleteEntry {
1013 buf: [0xCE, 0x8A, 0x00],
1014 len: 2,
1015 },
1016 CompleteEntry {
1017 buf: [0xCE, 0x8C, 0x00],
1018 len: 2,
1019 },
1020 CompleteEntry {
1021 buf: [0xCE, 0x8E, 0x00],
1022 len: 2,
1023 },
1024 CompleteEntry {
1025 buf: [0xCE, 0x8F, 0x00],
1026 len: 2,
1027 },
1028 CompleteEntry {
1029 buf: [0xC2, 0xB1, 0x00],
1030 len: 2,
1031 },
1032 CompleteEntry {
1033 buf: [0xE2, 0x89, 0xA5],
1034 len: 3,
1035 },
1036 CompleteEntry {
1037 buf: [0xE2, 0x89, 0xA4],
1038 len: 3,
1039 },
1040 CompleteEntry {
1041 buf: [0xCE, 0xAA, 0x00],
1042 len: 2,
1043 },
1044 CompleteEntry {
1045 buf: [0xCE, 0xAB, 0x00],
1046 len: 2,
1047 },
1048 CompleteEntry {
1049 buf: [0xC3, 0xB7, 0x00],
1050 len: 2,
1051 },
1052 CompleteEntry {
1053 buf: [0xE2, 0x89, 0x88],
1054 len: 3,
1055 },
1056 CompleteEntry {
1057 buf: [0xC2, 0xB0, 0x00],
1058 len: 2,
1059 },
1060 CompleteEntry {
1061 buf: [0xE2, 0x88, 0x99],
1062 len: 3,
1063 },
1064 CompleteEntry {
1065 buf: [0xC2, 0xB7, 0x00],
1066 len: 2,
1067 },
1068 CompleteEntry {
1069 buf: [0xE2, 0x88, 0x9A],
1070 len: 3,
1071 },
1072 CompleteEntry {
1073 buf: [0xE2, 0x81, 0xBF],
1074 len: 3,
1075 },
1076 CompleteEntry {
1077 buf: [0xC2, 0xB2, 0x00],
1078 len: 2,
1079 },
1080 CompleteEntry {
1081 buf: [0xE2, 0x96, 0xA0],
1082 len: 3,
1083 },
1084 CompleteEntry {
1085 buf: [0xC2, 0xA0, 0x00],
1086 len: 2,
1087 },
1088];
1089impl Encoder for CP737 {
1090 #[doc(hidden)]
1091 #[inline]
1092 fn encode_grapheme(&self, bytes: &mut &[u8]) -> Option<u8> {
1093 let (&a, rest) = bytes.split_first().unwrap();
1094 Some(
1095 match (a, &bytes) {
1096 (0x00..=0x7F, _) => {
1097 *bytes = rest;
1098 a
1099 }
1100 (0xC2, [_, b, ..]) => {
1101 *bytes = &bytes[2..];
1102 match b {
1103 0xB1 => 0xF1,
1104 0xB0 => 0xF8,
1105 0xB7 => 0xFA,
1106 0xB2 => 0xFD,
1107 0xA0 => 0xFF,
1108 _ => return None,
1109 }
1110 }
1111 (0xC3, [_, b, ..]) => {
1112 *bytes = &bytes[2..];
1113 match b {
1114 0xB7 => 0xF6,
1115 _ => return None,
1116 }
1117 }
1118 (0xCE, [_, b, ..]) => {
1119 *bytes = &bytes[2..];
1120 match b {
1121 0x91 => 0x80,
1122 0x92 => 0x81,
1123 0x93 => 0x82,
1124 0x94 => 0x83,
1125 0x95 => 0x84,
1126 0x96 => 0x85,
1127 0x97 => 0x86,
1128 0x98 => 0x87,
1129 0x99 => 0x88,
1130 0x9A => 0x89,
1131 0x9B => 0x8A,
1132 0x9C => 0x8B,
1133 0x9D => 0x8C,
1134 0x9E => 0x8D,
1135 0x9F => 0x8E,
1136 0xA0 => 0x8F,
1137 0xA1 => 0x90,
1138 0xA3 => 0x91,
1139 0xA4 => 0x92,
1140 0xA5 => 0x93,
1141 0xA6 => 0x94,
1142 0xA7 => 0x95,
1143 0xA8 => 0x96,
1144 0xA9 => 0x97,
1145 0xB1 => 0x98,
1146 0xB2 => 0x99,
1147 0xB3 => 0x9A,
1148 0xB4 => 0x9B,
1149 0xB5 => 0x9C,
1150 0xB6 => 0x9D,
1151 0xB7 => 0x9E,
1152 0xB8 => 0x9F,
1153 0xB9 => 0xA0,
1154 0xBA => 0xA1,
1155 0xBB => 0xA2,
1156 0xBC => 0xA3,
1157 0xBD => 0xA4,
1158 0xBE => 0xA5,
1159 0xBF => 0xA6,
1160 0xAC => 0xE1,
1161 0xAD => 0xE2,
1162 0xAE => 0xE3,
1163 0xAF => 0xE5,
1164 0x86 => 0xEA,
1165 0x88 => 0xEB,
1166 0x89 => 0xEC,
1167 0x8A => 0xED,
1168 0x8C => 0xEE,
1169 0x8E => 0xEF,
1170 0x8F => 0xF0,
1171 0xAA => 0xF4,
1172 0xAB => 0xF5,
1173 _ => return None,
1174 }
1175 }
1176 (0xCF, [_, b, ..]) => {
1177 *bytes = &bytes[2..];
1178 match b {
1179 0x80 => 0xA7,
1180 0x81 => 0xA8,
1181 0x83 => 0xA9,
1182 0x82 => 0xAA,
1183 0x84 => 0xAB,
1184 0x85 => 0xAC,
1185 0x86 => 0xAD,
1186 0x87 => 0xAE,
1187 0x88 => 0xAF,
1188 0x89 => 0xE0,
1189 0x8A => 0xE4,
1190 0x8C => 0xE6,
1191 0x8D => 0xE7,
1192 0x8B => 0xE8,
1193 0x8E => 0xE9,
1194 _ => return None,
1195 }
1196 }
1197 (0xE2, [_, b, c, ..]) => {
1198 *bytes = &bytes[3..];
1199 match b {
1200 0x81 => {
1201 match c {
1202 0xBF => 0xFC,
1203 _ => return None,
1204 }
1205 }
1206 0x88 => {
1207 match c {
1208 0x99 => 0xF9,
1209 0x9A => 0xFB,
1210 _ => return None,
1211 }
1212 }
1213 0x89 => {
1214 match c {
1215 0xA5 => 0xF2,
1216 0xA4 => 0xF3,
1217 0x88 => 0xF7,
1218 _ => return None,
1219 }
1220 }
1221 0x94 => {
1222 match c {
1223 0x82 => 0xB3,
1224 0xA4 => 0xB4,
1225 0x90 => 0xBF,
1226 0x94 => 0xC0,
1227 0xB4 => 0xC1,
1228 0xAC => 0xC2,
1229 0x9C => 0xC3,
1230 0x80 => 0xC4,
1231 0xBC => 0xC5,
1232 0x98 => 0xD9,
1233 0x8C => 0xDA,
1234 _ => return None,
1235 }
1236 }
1237 0x95 => {
1238 match c {
1239 0xA1 => 0xB5,
1240 0xA2 => 0xB6,
1241 0x96 => 0xB7,
1242 0x95 => 0xB8,
1243 0xA3 => 0xB9,
1244 0x91 => 0xBA,
1245 0x97 => 0xBB,
1246 0x9D => 0xBC,
1247 0x9C => 0xBD,
1248 0x9B => 0xBE,
1249 0x9E => 0xC6,
1250 0x9F => 0xC7,
1251 0x9A => 0xC8,
1252 0x94 => 0xC9,
1253 0xA9 => 0xCA,
1254 0xA6 => 0xCB,
1255 0xA0 => 0xCC,
1256 0x90 => 0xCD,
1257 0xAC => 0xCE,
1258 0xA7 => 0xCF,
1259 0xA8 => 0xD0,
1260 0xA4 => 0xD1,
1261 0xA5 => 0xD2,
1262 0x99 => 0xD3,
1263 0x98 => 0xD4,
1264 0x92 => 0xD5,
1265 0x93 => 0xD6,
1266 0xAB => 0xD7,
1267 0xAA => 0xD8,
1268 _ => return None,
1269 }
1270 }
1271 0x96 => {
1272 match c {
1273 0x91 => 0xB0,
1274 0x92 => 0xB1,
1275 0x93 => 0xB2,
1276 0x88 => 0xDB,
1277 0x84 => 0xDC,
1278 0x8C => 0xDD,
1279 0x90 => 0xDE,
1280 0x80 => 0xDF,
1281 0xA0 => 0xFE,
1282 _ => return None,
1283 }
1284 }
1285 _ => return None,
1286 }
1287 }
1288 (0xC2..=0xDF, _) => {
1289 *bytes = &bytes[2..];
1290 return None;
1291 }
1292 (0xE0..=0xEF, _) => {
1293 *bytes = &bytes[3..];
1294 return None;
1295 }
1296 (0xF0..=0xF4, _) => {
1297 *bytes = &bytes[4..];
1298 return None;
1299 }
1300 _ => panic!(),
1301 },
1302 )
1303 }
1304}