yore/code_pages/
cp1256.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 CP1256;
10impl CP1256 {
11    /// Decode CP1256 byte-encoding into UTF-8 string
12    ///
13    /// # Examples
14    ///
15    /// ```
16    /// use yore::code_pages::CP1256;
17    ///
18    /// assert_eq!(CP1256.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 CP1256 byte-encoding
25    ///
26    /// Undefined characters will result in [`EncodeError`]
27    ///
28    /// # Examples
29    ///
30    /// ```
31    /// use yore::code_pages::CP1256;
32    /// use yore::EncodeError;
33    ///
34    /// assert_eq!(CP1256.encode("text").unwrap(), vec![116, 101, 120, 116]);
35    /// assert!(matches!(CP1256.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 CP1256 byte-encoding
42    ///
43    /// Undefined characters will be replaced with byte `fallback`
44    ///
45    /// # Examples
46    ///
47    /// ```
48    /// use yore::code_pages::CP1256;
49    ///
50    /// assert_eq!(CP1256.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 CP1256 {
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: [0xE2, 0x82, 0xAC],
578        len: 3,
579    },
580    CompleteEntry {
581        buf: [0xD9, 0xBE, 0x00],
582        len: 2,
583    },
584    CompleteEntry {
585        buf: [0xE2, 0x80, 0x9A],
586        len: 3,
587    },
588    CompleteEntry {
589        buf: [0xC6, 0x92, 0x00],
590        len: 2,
591    },
592    CompleteEntry {
593        buf: [0xE2, 0x80, 0x9E],
594        len: 3,
595    },
596    CompleteEntry {
597        buf: [0xE2, 0x80, 0xA6],
598        len: 3,
599    },
600    CompleteEntry {
601        buf: [0xE2, 0x80, 0xA0],
602        len: 3,
603    },
604    CompleteEntry {
605        buf: [0xE2, 0x80, 0xA1],
606        len: 3,
607    },
608    CompleteEntry {
609        buf: [0xCB, 0x86, 0x00],
610        len: 2,
611    },
612    CompleteEntry {
613        buf: [0xE2, 0x80, 0xB0],
614        len: 3,
615    },
616    CompleteEntry {
617        buf: [0xD9, 0xB9, 0x00],
618        len: 2,
619    },
620    CompleteEntry {
621        buf: [0xE2, 0x80, 0xB9],
622        len: 3,
623    },
624    CompleteEntry {
625        buf: [0xC5, 0x92, 0x00],
626        len: 2,
627    },
628    CompleteEntry {
629        buf: [0xDA, 0x86, 0x00],
630        len: 2,
631    },
632    CompleteEntry {
633        buf: [0xDA, 0x98, 0x00],
634        len: 2,
635    },
636    CompleteEntry {
637        buf: [0xDA, 0x88, 0x00],
638        len: 2,
639    },
640    CompleteEntry {
641        buf: [0xDA, 0xAF, 0x00],
642        len: 2,
643    },
644    CompleteEntry {
645        buf: [0xE2, 0x80, 0x98],
646        len: 3,
647    },
648    CompleteEntry {
649        buf: [0xE2, 0x80, 0x99],
650        len: 3,
651    },
652    CompleteEntry {
653        buf: [0xE2, 0x80, 0x9C],
654        len: 3,
655    },
656    CompleteEntry {
657        buf: [0xE2, 0x80, 0x9D],
658        len: 3,
659    },
660    CompleteEntry {
661        buf: [0xE2, 0x80, 0xA2],
662        len: 3,
663    },
664    CompleteEntry {
665        buf: [0xE2, 0x80, 0x93],
666        len: 3,
667    },
668    CompleteEntry {
669        buf: [0xE2, 0x80, 0x94],
670        len: 3,
671    },
672    CompleteEntry {
673        buf: [0xDA, 0xA9, 0x00],
674        len: 2,
675    },
676    CompleteEntry {
677        buf: [0xE2, 0x84, 0xA2],
678        len: 3,
679    },
680    CompleteEntry {
681        buf: [0xDA, 0x91, 0x00],
682        len: 2,
683    },
684    CompleteEntry {
685        buf: [0xE2, 0x80, 0xBA],
686        len: 3,
687    },
688    CompleteEntry {
689        buf: [0xC5, 0x93, 0x00],
690        len: 2,
691    },
692    CompleteEntry {
693        buf: [0xE2, 0x80, 0x8C],
694        len: 3,
695    },
696    CompleteEntry {
697        buf: [0xE2, 0x80, 0x8D],
698        len: 3,
699    },
700    CompleteEntry {
701        buf: [0xDA, 0xBA, 0x00],
702        len: 2,
703    },
704    CompleteEntry {
705        buf: [0xC2, 0xA0, 0x00],
706        len: 2,
707    },
708    CompleteEntry {
709        buf: [0xD8, 0x8C, 0x00],
710        len: 2,
711    },
712    CompleteEntry {
713        buf: [0xC2, 0xA2, 0x00],
714        len: 2,
715    },
716    CompleteEntry {
717        buf: [0xC2, 0xA3, 0x00],
718        len: 2,
719    },
720    CompleteEntry {
721        buf: [0xC2, 0xA4, 0x00],
722        len: 2,
723    },
724    CompleteEntry {
725        buf: [0xC2, 0xA5, 0x00],
726        len: 2,
727    },
728    CompleteEntry {
729        buf: [0xC2, 0xA6, 0x00],
730        len: 2,
731    },
732    CompleteEntry {
733        buf: [0xC2, 0xA7, 0x00],
734        len: 2,
735    },
736    CompleteEntry {
737        buf: [0xC2, 0xA8, 0x00],
738        len: 2,
739    },
740    CompleteEntry {
741        buf: [0xC2, 0xA9, 0x00],
742        len: 2,
743    },
744    CompleteEntry {
745        buf: [0xDA, 0xBE, 0x00],
746        len: 2,
747    },
748    CompleteEntry {
749        buf: [0xC2, 0xAB, 0x00],
750        len: 2,
751    },
752    CompleteEntry {
753        buf: [0xC2, 0xAC, 0x00],
754        len: 2,
755    },
756    CompleteEntry {
757        buf: [0xC2, 0xAD, 0x00],
758        len: 2,
759    },
760    CompleteEntry {
761        buf: [0xC2, 0xAE, 0x00],
762        len: 2,
763    },
764    CompleteEntry {
765        buf: [0xC2, 0xAF, 0x00],
766        len: 2,
767    },
768    CompleteEntry {
769        buf: [0xC2, 0xB0, 0x00],
770        len: 2,
771    },
772    CompleteEntry {
773        buf: [0xC2, 0xB1, 0x00],
774        len: 2,
775    },
776    CompleteEntry {
777        buf: [0xC2, 0xB2, 0x00],
778        len: 2,
779    },
780    CompleteEntry {
781        buf: [0xC2, 0xB3, 0x00],
782        len: 2,
783    },
784    CompleteEntry {
785        buf: [0xC2, 0xB4, 0x00],
786        len: 2,
787    },
788    CompleteEntry {
789        buf: [0xC2, 0xB5, 0x00],
790        len: 2,
791    },
792    CompleteEntry {
793        buf: [0xC2, 0xB6, 0x00],
794        len: 2,
795    },
796    CompleteEntry {
797        buf: [0xC2, 0xB7, 0x00],
798        len: 2,
799    },
800    CompleteEntry {
801        buf: [0xC2, 0xB8, 0x00],
802        len: 2,
803    },
804    CompleteEntry {
805        buf: [0xC2, 0xB9, 0x00],
806        len: 2,
807    },
808    CompleteEntry {
809        buf: [0xD8, 0x9B, 0x00],
810        len: 2,
811    },
812    CompleteEntry {
813        buf: [0xC2, 0xBB, 0x00],
814        len: 2,
815    },
816    CompleteEntry {
817        buf: [0xC2, 0xBC, 0x00],
818        len: 2,
819    },
820    CompleteEntry {
821        buf: [0xC2, 0xBD, 0x00],
822        len: 2,
823    },
824    CompleteEntry {
825        buf: [0xC2, 0xBE, 0x00],
826        len: 2,
827    },
828    CompleteEntry {
829        buf: [0xD8, 0x9F, 0x00],
830        len: 2,
831    },
832    CompleteEntry {
833        buf: [0xDB, 0x81, 0x00],
834        len: 2,
835    },
836    CompleteEntry {
837        buf: [0xD8, 0xA1, 0x00],
838        len: 2,
839    },
840    CompleteEntry {
841        buf: [0xD8, 0xA2, 0x00],
842        len: 2,
843    },
844    CompleteEntry {
845        buf: [0xD8, 0xA3, 0x00],
846        len: 2,
847    },
848    CompleteEntry {
849        buf: [0xD8, 0xA4, 0x00],
850        len: 2,
851    },
852    CompleteEntry {
853        buf: [0xD8, 0xA5, 0x00],
854        len: 2,
855    },
856    CompleteEntry {
857        buf: [0xD8, 0xA6, 0x00],
858        len: 2,
859    },
860    CompleteEntry {
861        buf: [0xD8, 0xA7, 0x00],
862        len: 2,
863    },
864    CompleteEntry {
865        buf: [0xD8, 0xA8, 0x00],
866        len: 2,
867    },
868    CompleteEntry {
869        buf: [0xD8, 0xA9, 0x00],
870        len: 2,
871    },
872    CompleteEntry {
873        buf: [0xD8, 0xAA, 0x00],
874        len: 2,
875    },
876    CompleteEntry {
877        buf: [0xD8, 0xAB, 0x00],
878        len: 2,
879    },
880    CompleteEntry {
881        buf: [0xD8, 0xAC, 0x00],
882        len: 2,
883    },
884    CompleteEntry {
885        buf: [0xD8, 0xAD, 0x00],
886        len: 2,
887    },
888    CompleteEntry {
889        buf: [0xD8, 0xAE, 0x00],
890        len: 2,
891    },
892    CompleteEntry {
893        buf: [0xD8, 0xAF, 0x00],
894        len: 2,
895    },
896    CompleteEntry {
897        buf: [0xD8, 0xB0, 0x00],
898        len: 2,
899    },
900    CompleteEntry {
901        buf: [0xD8, 0xB1, 0x00],
902        len: 2,
903    },
904    CompleteEntry {
905        buf: [0xD8, 0xB2, 0x00],
906        len: 2,
907    },
908    CompleteEntry {
909        buf: [0xD8, 0xB3, 0x00],
910        len: 2,
911    },
912    CompleteEntry {
913        buf: [0xD8, 0xB4, 0x00],
914        len: 2,
915    },
916    CompleteEntry {
917        buf: [0xD8, 0xB5, 0x00],
918        len: 2,
919    },
920    CompleteEntry {
921        buf: [0xD8, 0xB6, 0x00],
922        len: 2,
923    },
924    CompleteEntry {
925        buf: [0xC3, 0x97, 0x00],
926        len: 2,
927    },
928    CompleteEntry {
929        buf: [0xD8, 0xB7, 0x00],
930        len: 2,
931    },
932    CompleteEntry {
933        buf: [0xD8, 0xB8, 0x00],
934        len: 2,
935    },
936    CompleteEntry {
937        buf: [0xD8, 0xB9, 0x00],
938        len: 2,
939    },
940    CompleteEntry {
941        buf: [0xD8, 0xBA, 0x00],
942        len: 2,
943    },
944    CompleteEntry {
945        buf: [0xD9, 0x80, 0x00],
946        len: 2,
947    },
948    CompleteEntry {
949        buf: [0xD9, 0x81, 0x00],
950        len: 2,
951    },
952    CompleteEntry {
953        buf: [0xD9, 0x82, 0x00],
954        len: 2,
955    },
956    CompleteEntry {
957        buf: [0xD9, 0x83, 0x00],
958        len: 2,
959    },
960    CompleteEntry {
961        buf: [0xC3, 0xA0, 0x00],
962        len: 2,
963    },
964    CompleteEntry {
965        buf: [0xD9, 0x84, 0x00],
966        len: 2,
967    },
968    CompleteEntry {
969        buf: [0xC3, 0xA2, 0x00],
970        len: 2,
971    },
972    CompleteEntry {
973        buf: [0xD9, 0x85, 0x00],
974        len: 2,
975    },
976    CompleteEntry {
977        buf: [0xD9, 0x86, 0x00],
978        len: 2,
979    },
980    CompleteEntry {
981        buf: [0xD9, 0x87, 0x00],
982        len: 2,
983    },
984    CompleteEntry {
985        buf: [0xD9, 0x88, 0x00],
986        len: 2,
987    },
988    CompleteEntry {
989        buf: [0xC3, 0xA7, 0x00],
990        len: 2,
991    },
992    CompleteEntry {
993        buf: [0xC3, 0xA8, 0x00],
994        len: 2,
995    },
996    CompleteEntry {
997        buf: [0xC3, 0xA9, 0x00],
998        len: 2,
999    },
1000    CompleteEntry {
1001        buf: [0xC3, 0xAA, 0x00],
1002        len: 2,
1003    },
1004    CompleteEntry {
1005        buf: [0xC3, 0xAB, 0x00],
1006        len: 2,
1007    },
1008    CompleteEntry {
1009        buf: [0xD9, 0x89, 0x00],
1010        len: 2,
1011    },
1012    CompleteEntry {
1013        buf: [0xD9, 0x8A, 0x00],
1014        len: 2,
1015    },
1016    CompleteEntry {
1017        buf: [0xC3, 0xAE, 0x00],
1018        len: 2,
1019    },
1020    CompleteEntry {
1021        buf: [0xC3, 0xAF, 0x00],
1022        len: 2,
1023    },
1024    CompleteEntry {
1025        buf: [0xD9, 0x8B, 0x00],
1026        len: 2,
1027    },
1028    CompleteEntry {
1029        buf: [0xD9, 0x8C, 0x00],
1030        len: 2,
1031    },
1032    CompleteEntry {
1033        buf: [0xD9, 0x8D, 0x00],
1034        len: 2,
1035    },
1036    CompleteEntry {
1037        buf: [0xD9, 0x8E, 0x00],
1038        len: 2,
1039    },
1040    CompleteEntry {
1041        buf: [0xC3, 0xB4, 0x00],
1042        len: 2,
1043    },
1044    CompleteEntry {
1045        buf: [0xD9, 0x8F, 0x00],
1046        len: 2,
1047    },
1048    CompleteEntry {
1049        buf: [0xD9, 0x90, 0x00],
1050        len: 2,
1051    },
1052    CompleteEntry {
1053        buf: [0xC3, 0xB7, 0x00],
1054        len: 2,
1055    },
1056    CompleteEntry {
1057        buf: [0xD9, 0x91, 0x00],
1058        len: 2,
1059    },
1060    CompleteEntry {
1061        buf: [0xC3, 0xB9, 0x00],
1062        len: 2,
1063    },
1064    CompleteEntry {
1065        buf: [0xD9, 0x92, 0x00],
1066        len: 2,
1067    },
1068    CompleteEntry {
1069        buf: [0xC3, 0xBB, 0x00],
1070        len: 2,
1071    },
1072    CompleteEntry {
1073        buf: [0xC3, 0xBC, 0x00],
1074        len: 2,
1075    },
1076    CompleteEntry {
1077        buf: [0xE2, 0x80, 0x8E],
1078        len: 3,
1079    },
1080    CompleteEntry {
1081        buf: [0xE2, 0x80, 0x8F],
1082        len: 3,
1083    },
1084    CompleteEntry {
1085        buf: [0xDB, 0x92, 0x00],
1086        len: 2,
1087    },
1088];
1089impl Encoder for CP1256 {
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                        0xA0 => 0xA0,
1104                        0xA2 => 0xA2,
1105                        0xA3 => 0xA3,
1106                        0xA4 => 0xA4,
1107                        0xA5 => 0xA5,
1108                        0xA6 => 0xA6,
1109                        0xA7 => 0xA7,
1110                        0xA8 => 0xA8,
1111                        0xA9 => 0xA9,
1112                        0xAB => 0xAB,
1113                        0xAC => 0xAC,
1114                        0xAD => 0xAD,
1115                        0xAE => 0xAE,
1116                        0xAF => 0xAF,
1117                        0xB0 => 0xB0,
1118                        0xB1 => 0xB1,
1119                        0xB2 => 0xB2,
1120                        0xB3 => 0xB3,
1121                        0xB4 => 0xB4,
1122                        0xB5 => 0xB5,
1123                        0xB6 => 0xB6,
1124                        0xB7 => 0xB7,
1125                        0xB8 => 0xB8,
1126                        0xB9 => 0xB9,
1127                        0xBB => 0xBB,
1128                        0xBC => 0xBC,
1129                        0xBD => 0xBD,
1130                        0xBE => 0xBE,
1131                        _ => return None,
1132                    }
1133                }
1134                (0xC3, [_, b, ..]) => {
1135                    *bytes = &bytes[2..];
1136                    match b {
1137                        0x97 => 0xD7,
1138                        0xA0 => 0xE0,
1139                        0xA2 => 0xE2,
1140                        0xA7 => 0xE7,
1141                        0xA8 => 0xE8,
1142                        0xA9 => 0xE9,
1143                        0xAA => 0xEA,
1144                        0xAB => 0xEB,
1145                        0xAE => 0xEE,
1146                        0xAF => 0xEF,
1147                        0xB4 => 0xF4,
1148                        0xB7 => 0xF7,
1149                        0xB9 => 0xF9,
1150                        0xBB => 0xFB,
1151                        0xBC => 0xFC,
1152                        _ => return None,
1153                    }
1154                }
1155                (0xC5, [_, b, ..]) => {
1156                    *bytes = &bytes[2..];
1157                    match b {
1158                        0x92 => 0x8C,
1159                        0x93 => 0x9C,
1160                        _ => return None,
1161                    }
1162                }
1163                (0xC6, [_, b, ..]) => {
1164                    *bytes = &bytes[2..];
1165                    match b {
1166                        0x92 => 0x83,
1167                        _ => return None,
1168                    }
1169                }
1170                (0xCB, [_, b, ..]) => {
1171                    *bytes = &bytes[2..];
1172                    match b {
1173                        0x86 => 0x88,
1174                        _ => return None,
1175                    }
1176                }
1177                (0xD8, [_, b, ..]) => {
1178                    *bytes = &bytes[2..];
1179                    match b {
1180                        0x8C => 0xA1,
1181                        0x9B => 0xBA,
1182                        0x9F => 0xBF,
1183                        0xA1 => 0xC1,
1184                        0xA2 => 0xC2,
1185                        0xA3 => 0xC3,
1186                        0xA4 => 0xC4,
1187                        0xA5 => 0xC5,
1188                        0xA6 => 0xC6,
1189                        0xA7 => 0xC7,
1190                        0xA8 => 0xC8,
1191                        0xA9 => 0xC9,
1192                        0xAA => 0xCA,
1193                        0xAB => 0xCB,
1194                        0xAC => 0xCC,
1195                        0xAD => 0xCD,
1196                        0xAE => 0xCE,
1197                        0xAF => 0xCF,
1198                        0xB0 => 0xD0,
1199                        0xB1 => 0xD1,
1200                        0xB2 => 0xD2,
1201                        0xB3 => 0xD3,
1202                        0xB4 => 0xD4,
1203                        0xB5 => 0xD5,
1204                        0xB6 => 0xD6,
1205                        0xB7 => 0xD8,
1206                        0xB8 => 0xD9,
1207                        0xB9 => 0xDA,
1208                        0xBA => 0xDB,
1209                        _ => return None,
1210                    }
1211                }
1212                (0xD9, [_, b, ..]) => {
1213                    *bytes = &bytes[2..];
1214                    match b {
1215                        0xBE => 0x81,
1216                        0xB9 => 0x8A,
1217                        0x80 => 0xDC,
1218                        0x81 => 0xDD,
1219                        0x82 => 0xDE,
1220                        0x83 => 0xDF,
1221                        0x84 => 0xE1,
1222                        0x85 => 0xE3,
1223                        0x86 => 0xE4,
1224                        0x87 => 0xE5,
1225                        0x88 => 0xE6,
1226                        0x89 => 0xEC,
1227                        0x8A => 0xED,
1228                        0x8B => 0xF0,
1229                        0x8C => 0xF1,
1230                        0x8D => 0xF2,
1231                        0x8E => 0xF3,
1232                        0x8F => 0xF5,
1233                        0x90 => 0xF6,
1234                        0x91 => 0xF8,
1235                        0x92 => 0xFA,
1236                        _ => return None,
1237                    }
1238                }
1239                (0xDA, [_, b, ..]) => {
1240                    *bytes = &bytes[2..];
1241                    match b {
1242                        0x86 => 0x8D,
1243                        0x98 => 0x8E,
1244                        0x88 => 0x8F,
1245                        0xAF => 0x90,
1246                        0xA9 => 0x98,
1247                        0x91 => 0x9A,
1248                        0xBA => 0x9F,
1249                        0xBE => 0xAA,
1250                        _ => return None,
1251                    }
1252                }
1253                (0xDB, [_, b, ..]) => {
1254                    *bytes = &bytes[2..];
1255                    match b {
1256                        0x81 => 0xC0,
1257                        0x92 => 0xFF,
1258                        _ => return None,
1259                    }
1260                }
1261                (0xE2, [_, b, c, ..]) => {
1262                    *bytes = &bytes[3..];
1263                    match b {
1264                        0x80 => {
1265                            match c {
1266                                0x9A => 0x82,
1267                                0x9E => 0x84,
1268                                0xA6 => 0x85,
1269                                0xA0 => 0x86,
1270                                0xA1 => 0x87,
1271                                0xB0 => 0x89,
1272                                0xB9 => 0x8B,
1273                                0x98 => 0x91,
1274                                0x99 => 0x92,
1275                                0x9C => 0x93,
1276                                0x9D => 0x94,
1277                                0xA2 => 0x95,
1278                                0x93 => 0x96,
1279                                0x94 => 0x97,
1280                                0xBA => 0x9B,
1281                                0x8C => 0x9D,
1282                                0x8D => 0x9E,
1283                                0x8E => 0xFD,
1284                                0x8F => 0xFE,
1285                                _ => return None,
1286                            }
1287                        }
1288                        0x82 => {
1289                            match c {
1290                                0xAC => 0x80,
1291                                _ => return None,
1292                            }
1293                        }
1294                        0x84 => {
1295                            match c {
1296                                0xA2 => 0x99,
1297                                _ => return None,
1298                            }
1299                        }
1300                        _ => return None,
1301                    }
1302                }
1303                (0xC2..=0xDF, _) => {
1304                    *bytes = &bytes[2..];
1305                    return None;
1306                }
1307                (0xE0..=0xEF, _) => {
1308                    *bytes = &bytes[3..];
1309                    return None;
1310                }
1311                (0xF0..=0xF4, _) => {
1312                    *bytes = &bytes[4..];
1313                    return None;
1314                }
1315                _ => panic!(),
1316            },
1317        )
1318    }
1319}