yore/code_pages/
cp737.rs

1//! Code autogenerated from <https://unicode.org/Public/MAPPINGS/VENDORS/>
2//! See binary codegen crate
3use 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    /// Decode CP737 byte-encoding into UTF-8 string
12    ///
13    /// # Examples
14    ///
15    /// ```
16    /// use yore::code_pages::CP737;
17    ///
18    /// assert_eq!(CP737.decode(&[116, 101, 120, 116]), "text");
19    /// ```
20    #[inline(always)]
21    pub fn decode(self, bytes: &[u8]) -> Cow<'_, str> {
22        decode_helper(&DECODE_TABLE, bytes)
23    }
24    /// Encode UTF-8 string into CP737 byte-encoding
25    ///
26    /// Undefined characters will result in [`EncodeError`]
27    ///
28    /// # Examples
29    ///
30    /// ```
31    /// use yore::code_pages::CP737;
32    /// use yore::EncodeError;
33    ///
34    /// assert_eq!(CP737.encode("text").unwrap(), vec![116, 101, 120, 116]);
35    /// assert!(matches!(CP737.encode("text 🦀"), EncodeError));
36    /// ```
37    #[inline(always)]
38    pub fn encode(self, s: &str) -> Result<Cow<'_, [u8]>, EncodeError> {
39        self.encode_helper(s, None)
40    }
41    /// Encode UTF-8 string into CP737 byte-encoding
42    ///
43    /// Undefined characters will be replaced with byte `fallback`
44    ///
45    /// # Examples
46    ///
47    /// ```
48    /// use yore::code_pages::CP737;
49    ///
50    /// assert_eq!(CP737.encode_lossy("text 🦀", 168), vec![116, 101, 120, 116, 32, 168]);
51    /// ```
52    #[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}