premium_pixel/
premium.rs

1use crate::Surface;
2
3/// Write on a surface using the Premium typeface
4pub trait Premium {
5    /// Write the text with the baseline starting at the given position.
6    /// Returns the width of the text in pixels.
7    fn premium(&mut self, x: i32, y: i32, text: &str) -> i32;
8}
9
10impl<S: Surface> Premium for S {
11    fn premium(&mut self, x: i32, y: i32, text: &str) -> i32 {
12        let mut w = 0;
13        for (i, c) in text.chars().enumerate() {
14            if i > 0 {
15                w += 2;
16            }
17            w += glyph(self, x + w, y, c);
18        }
19        w
20    }
21}
22
23fn glyph<S: Surface>(surface: &mut S, x: i32, y: i32, c: char) -> i32 {
24    let (c, w, o) = lookup(c);
25    let h = c.len() as i32;
26    for (i, l) in c.iter().enumerate() {
27        for j in 0..16 {
28            if l & (1 << (15 - j)) != 0 {
29                surface.pixel(x + j - 2, y - h + o + i as i32);
30            }
31        }
32    }
33    w
34}
35
36fn lookup(c: char) -> (&'static [u16], i32, i32) {
37    match c {
38        'A' => (
39            &[
40                0b0001111000000000,
41                0b0011001100000000,
42                0b0011001100000000,
43                0b0011001100000000,
44                0b0011111100000000,
45                0b0011001100000000,
46                0b0011001100000000,
47                0b0011001100000000,
48                0b0011001100000000,
49            ],
50            6,
51            0,
52        ),
53        'B' => (
54            &[
55                0b0011111000000000,
56                0b0011001100000000,
57                0b0011001100000000,
58                0b0011001100000000,
59                0b0011111000000000,
60                0b0011001100000000,
61                0b0011001100000000,
62                0b0011001100000000,
63                0b0011111000000000,
64            ],
65            6,
66            0,
67        ),
68        'C' => (
69            &[
70                0b0001111000000000,
71                0b0011000100000000,
72                0b0011000000000000,
73                0b0011000000000000,
74                0b0011000000000000,
75                0b0011000000000000,
76                0b0011000000000000,
77                0b0011000100000000,
78                0b0001111000000000,
79            ],
80            6,
81            0,
82        ),
83        'D' => (
84            &[
85                0b0011111000000000,
86                0b0011001100000000,
87                0b0011001100000000,
88                0b0011001100000000,
89                0b0011001100000000,
90                0b0011001100000000,
91                0b0011001100000000,
92                0b0011001100000000,
93                0b0011111000000000,
94            ],
95            6,
96            0,
97        ),
98        'E' => (
99            &[
100                0b0011111100000000,
101                0b0011000000000000,
102                0b0011000000000000,
103                0b0011000000000000,
104                0b0011111000000000,
105                0b0011000000000000,
106                0b0011000000000000,
107                0b0011000000000000,
108                0b0011111100000000,
109            ],
110            6,
111            0,
112        ),
113        'F' => (
114            &[
115                0b0011111100000000,
116                0b0011000000000000,
117                0b0011000000000000,
118                0b0011000000000000,
119                0b0011111000000000,
120                0b0011000000000000,
121                0b0011000000000000,
122                0b0011000000000000,
123                0b0011000000000000,
124            ],
125            6,
126            0,
127        ),
128        'G' => (
129            &[
130                0b0001111000000000,
131                0b0011000100000000,
132                0b0011000000000000,
133                0b0011000000000000,
134                0b0011000000000000,
135                0b0011011100000000,
136                0b0011001100000000,
137                0b0011001100000000,
138                0b0001111000000000,
139            ],
140            6,
141            0,
142        ),
143        'H' => (
144            &[
145                0b0011001100000000,
146                0b0011001100000000,
147                0b0011001100000000,
148                0b0011001100000000,
149                0b0011111100000000,
150                0b0011001100000000,
151                0b0011001100000000,
152                0b0011001100000000,
153                0b0011001100000000,
154            ],
155            6,
156            0,
157        ),
158        'I' => (
159            &[
160                0b0011000000000000,
161                0b0011000000000000,
162                0b0011000000000000,
163                0b0011000000000000,
164                0b0011000000000000,
165                0b0011000000000000,
166                0b0011000000000000,
167                0b0011000000000000,
168                0b0011000000000000,
169            ],
170            2,
171            0,
172        ),
173        'J' => (
174            &[
175                0b0000001100000000,
176                0b0000001100000000,
177                0b0000001100000000,
178                0b0000001100000000,
179                0b0000001100000000,
180                0b0000001100000000,
181                0b0000001100000000,
182                0b0010001100000000,
183                0b0001111000000000,
184            ],
185            6,
186            0,
187        ),
188        'K' => (
189            &[
190                0b0011000110000000,
191                0b0011001100000000,
192                0b0011011000000000,
193                0b0011110000000000,
194                0b0011100000000000,
195                0b0011110000000000,
196                0b0011011000000000,
197                0b0011001100000000,
198                0b0011000110000000,
199            ],
200            7,
201            0,
202        ),
203        'L' => (
204            &[
205                0b0011000000000000,
206                0b0011000000000000,
207                0b0011000000000000,
208                0b0011000000000000,
209                0b0011000000000000,
210                0b0011000000000000,
211                0b0011000000000000,
212                0b0011000000000000,
213                0b0011111100000000,
214            ],
215            6,
216            0,
217        ),
218        'M' => (
219            &[
220                0b0011000001100000,
221                0b0011100011100000,
222                0b0011110111100000,
223                0b0011111111100000,
224                0b0011011101100000,
225                0b0011001001100000,
226                0b0011000001100000,
227                0b0011000001100000,
228                0b0011000001100000,
229            ],
230            9,
231            0,
232        ),
233        'N' => (
234            &[
235                0b0011000110000000,
236                0b0011000110000000,
237                0b0011100110000000,
238                0b0011110110000000,
239                0b0011111110000000,
240                0b0011011110000000,
241                0b0011001110000000,
242                0b0011000110000000,
243                0b0011000110000000,
244            ],
245            7,
246            0,
247        ),
248        'O' => (
249            &[
250                0b0001111000000000,
251                0b0011001100000000,
252                0b0011001100000000,
253                0b0011001100000000,
254                0b0011001100000000,
255                0b0011001100000000,
256                0b0011001100000000,
257                0b0011001100000000,
258                0b0001111000000000,
259            ],
260            6,
261            0,
262        ),
263        'P' => (
264            &[
265                0b0011111000000000,
266                0b0011001100000000,
267                0b0011001100000000,
268                0b0011001100000000,
269                0b0011001100000000,
270                0b0011111000000000,
271                0b0011000000000000,
272                0b0011000000000000,
273                0b0011000000000000,
274            ],
275            6,
276            0,
277        ),
278        'Q' => (
279            &[
280                0b0001111000000000,
281                0b0011001100000000,
282                0b0011001100000000,
283                0b0011001100000000,
284                0b0011001100000000,
285                0b0011001100000000,
286                0b0011001100000000,
287                0b0011001100000000,
288                0b0001111000000000,
289                0b0000001100000000,
290            ],
291            6,
292            1,
293        ),
294        'R' => (
295            &[
296                0b0011111000000000,
297                0b0011001100000000,
298                0b0011001100000000,
299                0b0011001100000000,
300                0b0011111000000000,
301                0b0011001100000000,
302                0b0011001100000000,
303                0b0011001100000000,
304                0b0011001100000000,
305            ],
306            6,
307            0,
308        ),
309        'S' => (
310            &[
311                0b0001111000000000,
312                0b0011000100000000,
313                0b0011000000000000,
314                0b0011000000000000,
315                0b0001111000000000,
316                0b0000001100000000,
317                0b0000001100000000,
318                0b0010001100000000,
319                0b0001111000000000,
320            ],
321            6,
322            0,
323        ),
324        'T' => (
325            &[
326                0b0111111000000000,
327                0b0001100000000000,
328                0b0001100000000000,
329                0b0001100000000000,
330                0b0001100000000000,
331                0b0001100000000000,
332                0b0001100000000000,
333                0b0001100000000000,
334                0b0001100000000000,
335            ],
336            4,
337            0,
338        ),
339        'U' => (
340            &[
341                0b0011001100000000,
342                0b0011001100000000,
343                0b0011001100000000,
344                0b0011001100000000,
345                0b0011001100000000,
346                0b0011001100000000,
347                0b0011001100000000,
348                0b0011001100000000,
349                0b0001111000000000,
350            ],
351            6,
352            0,
353        ),
354        'V' => (
355            &[
356                0b0011001100000000,
357                0b0011001100000000,
358                0b0011001100000000,
359                0b0011001100000000,
360                0b0011001100000000,
361                0b0011001100000000,
362                0b0011001100000000,
363                0b0001111000000000,
364                0b0000110000000000,
365            ],
366            6,
367            0,
368        ),
369        'W' => (
370            &[
371                0b0011001100110000,
372                0b0011001100110000,
373                0b0011001100110000,
374                0b0011001100110000,
375                0b0011001100110000,
376                0b0011001100110000,
377                0b0011001100110000,
378                0b0001111111100000,
379                0b0000110011000000,
380            ],
381            10,
382            0,
383        ),
384        'X' => (
385            &[
386                0b0011001100000000,
387                0b0011001100000000,
388                0b0011001100000000,
389                0b0011001100000000,
390                0b0001111000000000,
391                0b0011001100000000,
392                0b0011001100000000,
393                0b0011001100000000,
394                0b0011001100000000,
395            ],
396            6,
397            0,
398        ),
399        'Y' => (
400            &[
401                0b0011001100000000,
402                0b0011001100000000,
403                0b0011001100000000,
404                0b0011001100000000,
405                0b0001111000000000,
406                0b0000110000000000,
407                0b0000110000000000,
408                0b0000110000000000,
409                0b0000110000000000,
410            ],
411            6,
412            0,
413        ),
414        'Z' => (
415            &[
416                0b0011111100000000,
417                0b0000001100000000,
418                0b0000001100000000,
419                0b0000011000000000,
420                0b0000110000000000,
421                0b0001100000000000,
422                0b0011000000000000,
423                0b0011000000000000,
424                0b0011111100000000,
425            ],
426            6,
427            0,
428        ),
429        'a' => (
430            &[
431                0b0001111000000000,
432                0b0000001100000000,
433                0b0001111100000000,
434                0b0011001100000000,
435                0b0011001100000000,
436                0b0011001100000000,
437                0b0001111100000000,
438            ],
439            6,
440            0,
441        ),
442        'b' => (
443            &[
444                0b0011000000000000,
445                0b0011000000000000,
446                0b0011111000000000,
447                0b0011001100000000,
448                0b0011001100000000,
449                0b0011001100000000,
450                0b0011001100000000,
451                0b0011001100000000,
452                0b0011111000000000,
453            ],
454            6,
455            0,
456        ),
457        'c' => (
458            &[
459                0b0001111000000000,
460                0b0011000100000000,
461                0b0011000000000000,
462                0b0011000000000000,
463                0b0011000000000000,
464                0b0011000100000000,
465                0b0001111000000000,
466            ],
467            6,
468            0,
469        ),
470        'd' => (
471            &[
472                0b0000001100000000,
473                0b0000001100000000,
474                0b0001111100000000,
475                0b0011001100000000,
476                0b0011001100000000,
477                0b0011001100000000,
478                0b0011001100000000,
479                0b0011001100000000,
480                0b0001111100000000,
481            ],
482            6,
483            0,
484        ),
485        'e' => (
486            &[
487                0b0001111000000000,
488                0b0011001100000000,
489                0b0011001100000000,
490                0b0011111100000000,
491                0b0011000000000000,
492                0b0011000100000000,
493                0b0001111000000000,
494            ],
495            6,
496            0,
497        ),
498        'f' => (
499            &[
500                0b0001100000000000,
501                0b0011000000000000,
502                0b0111100000000000,
503                0b0011000000000000,
504                0b0011000000000000,
505                0b0011000000000000,
506                0b0011000000000000,
507                0b0011000000000000,
508                0b0011000000000000,
509            ],
510            3,
511            0,
512        ),
513        'g' => (
514            &[
515                0b0001111100000000,
516                0b0011001100000000,
517                0b0011001100000000,
518                0b0011001100000000,
519                0b0011001100000000,
520                0b0011001100000000,
521                0b0001111100000000,
522                0b0000001100000000,
523                0b0010001100000000,
524                0b0001111000000000,
525            ],
526            6,
527            3,
528        ),
529        'h' => (
530            &[
531                0b0011000000000000,
532                0b0011000000000000,
533                0b0011111000000000,
534                0b0011001100000000,
535                0b0011001100000000,
536                0b0011001100000000,
537                0b0011001100000000,
538                0b0011001100000000,
539                0b0011001100000000,
540            ],
541            6,
542            0,
543        ),
544        'i' => (
545            &[
546                0b0011000000000000,
547                0b0000000000000000,
548                0b0011000000000000,
549                0b0011000000000000,
550                0b0011000000000000,
551                0b0011000000000000,
552                0b0011000000000000,
553                0b0011000000000000,
554                0b0011000000000000,
555            ],
556            2,
557            0,
558        ),
559        'j' => (
560            &[
561                0b0011000000000000,
562                0b0000000000000000,
563                0b0011000000000000,
564                0b0011000000000000,
565                0b0011000000000000,
566                0b0011000000000000,
567                0b0011000000000000,
568                0b0011000000000000,
569                0b0011000000000000,
570                0b0011000000000000,
571                0b0110000000000000,
572            ],
573            2,
574            2,
575        ),
576        'k' => (
577            &[
578                0b0011000000000000,
579                0b0011000000000000,
580                0b0011001100000000,
581                0b0011011000000000,
582                0b0011110000000000,
583                0b0011100000000000,
584                0b0011110000000000,
585                0b0011011000000000,
586                0b0011001100000000,
587            ],
588            6,
589            0,
590        ),
591        'l' => (
592            &[
593                0b0011000000000000,
594                0b0011000000000000,
595                0b0011000000000000,
596                0b0011000000000000,
597                0b0011000000000000,
598                0b0011000000000000,
599                0b0011000000000000,
600                0b0011000000000000,
601                0b0011000000000000,
602            ],
603            2,
604            0,
605        ),
606        'm' => (
607            &[
608                0b0011111111100000,
609                0b0011001100110000,
610                0b0011001100110000,
611                0b0011001100110000,
612                0b0011001100110000,
613                0b0011001100110000,
614                0b0011001100110000,
615            ],
616            10,
617            0,
618        ),
619        'n' => (
620            &[
621                0b0011111000000000,
622                0b0011001100000000,
623                0b0011001100000000,
624                0b0011001100000000,
625                0b0011001100000000,
626                0b0011001100000000,
627                0b0011001100000000,
628            ],
629            6,
630            0,
631        ),
632        'o' => (
633            &[
634                0b0001111000000000,
635                0b0011001100000000,
636                0b0011001100000000,
637                0b0011001100000000,
638                0b0011001100000000,
639                0b0011001100000000,
640                0b0001111000000000,
641            ],
642            6,
643            0,
644        ),
645        'p' => (
646            &[
647                0b0011111000000000,
648                0b0011001100000000,
649                0b0011001100000000,
650                0b0011001100000000,
651                0b0011001100000000,
652                0b0011001100000000,
653                0b0011111000000000,
654                0b0011000000000000,
655                0b0011000000000000,
656            ],
657            6,
658            2,
659        ),
660        'q' => (
661            &[
662                0b0001111100000000,
663                0b0011001100000000,
664                0b0011001100000000,
665                0b0011001100000000,
666                0b0011001100000000,
667                0b0011001100000000,
668                0b0001111100000000,
669                0b0000001100000000,
670                0b0000001100000000,
671            ],
672            6,
673            2,
674        ),
675        'r' => (
676            &[
677                0b0011011000000000,
678                0b0011111000000000,
679                0b0011000000000000,
680                0b0011000000000000,
681                0b0011000000000000,
682                0b0011000000000000,
683                0b0011000000000000,
684            ],
685            5,
686            0,
687        ),
688        's' => (
689            &[
690                0b0001111000000000,
691                0b0011000100000000,
692                0b0011000000000000,
693                0b0001111000000000,
694                0b0000001100000000,
695                0b0010001100000000,
696                0b0001111000000000,
697            ],
698            6,
699            0,
700        ),
701        't' => (
702            &[
703                0b0011000000000000,
704                0b0011000000000000,
705                0b0111100000000000,
706                0b0011000000000000,
707                0b0011000000000000,
708                0b0011000000000000,
709                0b0011000000000000,
710                0b0011000000000000,
711                0b0001100000000000,
712            ],
713            3,
714            0,
715        ),
716        'u' => (
717            &[
718                0b0011001100000000,
719                0b0011001100000000,
720                0b0011001100000000,
721                0b0011001100000000,
722                0b0011001100000000,
723                0b0011001100000000,
724                0b0001111000000000,
725            ],
726            6,
727            0,
728        ),
729        'v' => (
730            &[
731                0b0011001100000000,
732                0b0011001100000000,
733                0b0011001100000000,
734                0b0011001100000000,
735                0b0011001100000000,
736                0b0001111000000000,
737                0b0000110000000000,
738            ],
739            6,
740            0,
741        ),
742        'w' => (
743            &[
744                0b0011001100110000,
745                0b0011001100110000,
746                0b0011001100110000,
747                0b0011001100110000,
748                0b0011001100110000,
749                0b0001111111100000,
750                0b0000110011000000,
751            ],
752            10,
753            0,
754        ),
755        'x' => (
756            &[
757                0b0011001100000000,
758                0b0011001100000000,
759                0b0011001100000000,
760                0b0001111000000000,
761                0b0011001100000000,
762                0b0011001100000000,
763                0b0011001100000000,
764            ],
765            6,
766            0,
767        ),
768        'y' => (
769            &[
770                0b0011001100000000,
771                0b0011001100000000,
772                0b0011001100000000,
773                0b0011001100000000,
774                0b0011001100000000,
775                0b0011001100000000,
776                0b0001111100000000,
777                0b0000001100000000,
778                0b0010001100000000,
779                0b0001111000000000,
780            ],
781            6,
782            3,
783        ),
784        'z' => (
785            &[
786                0b0011111100000000,
787                0b0000001100000000,
788                0b0000011000000000,
789                0b0000110000000000,
790                0b0001100000000000,
791                0b0011000000000000,
792                0b0011111100000000,
793            ],
794            6,
795            0,
796        ),
797        '0' => (
798            &[
799                0b0001111000000000,
800                0b0011001100000000,
801                0b0011001100000000,
802                0b0011001100000000,
803                0b0011001100000000,
804                0b0011001100000000,
805                0b0011001100000000,
806                0b0011001100000000,
807                0b0001111000000000,
808            ],
809            6,
810            0,
811        ),
812        '1' => (
813            &[
814                0b0001100000000000,
815                0b0011100000000000,
816                0b0001100000000000,
817                0b0001100000000000,
818                0b0001100000000000,
819                0b0001100000000000,
820                0b0001100000000000,
821                0b0001100000000000,
822                0b0001100000000000,
823            ],
824            3,
825            0,
826        ),
827        '2' => (
828            &[
829                0b0001111000000000,
830                0b0010001100000000,
831                0b0000001100000000,
832                0b0000001100000000,
833                0b0000011000000000,
834                0b0000110000000000,
835                0b0001100000000000,
836                0b0011000000000000,
837                0b0011111100000000,
838            ],
839            6,
840            0,
841        ),
842        '3' => (
843            &[
844                0b0011111100000000,
845                0b0000011000000000,
846                0b0000110000000000,
847                0b0001111000000000,
848                0b0000001100000000,
849                0b0000001100000000,
850                0b0000001100000000,
851                0b0010001100000000,
852                0b0001111000000000,
853            ],
854            6,
855            0,
856        ),
857        '4' => (
858            &[
859                0b0000001100000000,
860                0b0000011100000000,
861                0b0000101100000000,
862                0b0001001100000000,
863                0b0010001100000000,
864                0b0011111110000000,
865                0b0000001100000000,
866                0b0000001100000000,
867                0b0000001100000000,
868            ],
869            6,
870            0,
871        ),
872        '5' => (
873            &[
874                0b0011111100000000,
875                0b0011000000000000,
876                0b0011000000000000,
877                0b0011111000000000,
878                0b0000001100000000,
879                0b0000001100000000,
880                0b0000001100000000,
881                0b0010001100000000,
882                0b0001111000000000,
883            ],
884            6,
885            0,
886        ),
887        '6' => (
888            &[
889                0b0000111000000000,
890                0b0001100000000000,
891                0b0011000000000000,
892                0b0011111000000000,
893                0b0011001100000000,
894                0b0011001100000000,
895                0b0011001100000000,
896                0b0011001100000000,
897                0b0001111000000000,
898            ],
899            6,
900            0,
901        ),
902        '7' => (
903            &[
904                0b0011111100000000,
905                0b0000001100000000,
906                0b0000001100000000,
907                0b0000001100000000,
908                0b0000011000000000,
909                0b0000110000000000,
910                0b0000110000000000,
911                0b0000110000000000,
912                0b0000110000000000,
913            ],
914            6,
915            0,
916        ),
917        '8' => (
918            &[
919                0b0001111000000000,
920                0b0011001100000000,
921                0b0011001100000000,
922                0b0011001100000000,
923                0b0001111000000000,
924                0b0011001100000000,
925                0b0011001100000000,
926                0b0011001100000000,
927                0b0001111000000000,
928            ],
929            6,
930            0,
931        ),
932        '9' => (
933            &[
934                0b0001111000000000,
935                0b0011001100000000,
936                0b0011001100000000,
937                0b0011001100000000,
938                0b0011001100000000,
939                0b0001111100000000,
940                0b0000001100000000,
941                0b0000011000000000,
942                0b0001110000000000,
943            ],
944            6,
945            0,
946        ),
947        '.' => (&[0b0011000000000000, 0b0011000000000000], 2, 0),
948        ',' => (
949            &[
950                0b0011000000000000,
951                0b0011000000000000,
952                0b0001000000000000,
953                0b0010000000000000,
954            ],
955            2,
956            2,
957        ),
958        ':' => (
959            &[
960                0b0011000000000000,
961                0b0011000000000000,
962                0b0000000000000000,
963                0b0000000000000000,
964                0b0000000000000000,
965                0b0011000000000000,
966                0b0011000000000000,
967            ],
968            2,
969            0,
970        ),
971        ';' => (
972            &[
973                0b0011000000000000,
974                0b0011000000000000,
975                0b0000000000000000,
976                0b0000000000000000,
977                0b0000000000000000,
978                0b0011000000000000,
979                0b0011000000000000,
980                0b0001000000000000,
981                0b0010000000000000,
982            ],
983            2,
984            2,
985        ),
986        '!' => (
987            &[
988                0b0011000000000000,
989                0b0011000000000000,
990                0b0011000000000000,
991                0b0011000000000000,
992                0b0011000000000000,
993                0b0011000000000000,
994                0b0000000000000000,
995                0b0011000000000000,
996                0b0011000000000000,
997            ],
998            2,
999            0,
1000        ),
1001        '?' => (
1002            &[
1003                0b0001111000000000,
1004                0b0010001100000000,
1005                0b0000001100000000,
1006                0b0000011000000000,
1007                0b0000110000000000,
1008                0b0000110000000000,
1009                0b0000000000000000,
1010                0b0000110000000000,
1011                0b0000110000000000,
1012            ],
1013            6,
1014            0,
1015        ),
1016        '\'' => (
1017            &[
1018                0b0011000000000000,
1019                0b0011000000000000,
1020                0b0001000000000000,
1021                0b0010000000000000,
1022            ],
1023            2,
1024            -5,
1025        ),
1026        '_' => (&[0b0011111000000000], 5, 0),
1027        '+' => (
1028            &[
1029                0b0000100000000000,
1030                0b0000100000000000,
1031                0b0011111000000000,
1032                0b0000100000000000,
1033                0b0000100000000000,
1034            ],
1035            5,
1036            -1,
1037        ),
1038        '-' => (&[0b0011111000000000], 5, -3),
1039        '/' => (
1040            &[
1041                0b0000110000000000,
1042                0b0000110000000000,
1043                0b0000110000000000,
1044                0b0001100000000000,
1045                0b0001100000000000,
1046                0b0001100000000000,
1047                0b0011000000000000,
1048                0b0011000000000000,
1049                0b0011000000000000,
1050            ],
1051            4,
1052            0,
1053        ),
1054        '\\' => (
1055            &[
1056                0b0011000000000000,
1057                0b0011000000000000,
1058                0b0011000000000000,
1059                0b0001100000000000,
1060                0b0001100000000000,
1061                0b0001100000000000,
1062                0b0000110000000000,
1063                0b0000110000000000,
1064                0b0000110000000000,
1065            ],
1066            4,
1067            0,
1068        ),
1069        '(' => (
1070            &[
1071                0b0001100000000000,
1072                0b0011000000000000,
1073                0b0011000000000000,
1074                0b0011000000000000,
1075                0b0011000000000000,
1076                0b0011000000000000,
1077                0b0011000000000000,
1078                0b0011000000000000,
1079                0b0001100000000000,
1080            ],
1081            3,
1082            0,
1083        ),
1084        ')' => (
1085            &[
1086                0b0011000000000000,
1087                0b0001100000000000,
1088                0b0001100000000000,
1089                0b0001100000000000,
1090                0b0001100000000000,
1091                0b0001100000000000,
1092                0b0001100000000000,
1093                0b0001100000000000,
1094                0b0011000000000000,
1095            ],
1096            3,
1097            0,
1098        ),
1099        '<' => (
1100            &[
1101                0b0000110000000000,
1102                0b0001100000000000,
1103                0b0011000000000000,
1104                0b0001100000000000,
1105                0b0000110000000000,
1106            ],
1107            4,
1108            -1,
1109        ),
1110        '>' => (
1111            &[
1112                0b0011000000000000,
1113                0b0001100000000000,
1114                0b0000110000000000,
1115                0b0001100000000000,
1116                0b0011000000000000,
1117            ],
1118            4,
1119            -1,
1120        ),
1121        '[' => (
1122            &[
1123                0b0011110000000000,
1124                0b0011000000000000,
1125                0b0011000000000000,
1126                0b0011000000000000,
1127                0b0011000000000000,
1128                0b0011000000000000,
1129                0b0011000000000000,
1130                0b0011000000000000,
1131                0b0011110000000000,
1132            ],
1133            4,
1134            0,
1135        ),
1136        ']' => (
1137            &[
1138                0b0011110000000000,
1139                0b0000110000000000,
1140                0b0000110000000000,
1141                0b0000110000000000,
1142                0b0000110000000000,
1143                0b0000110000000000,
1144                0b0000110000000000,
1145                0b0000110000000000,
1146                0b0011110000000000,
1147            ],
1148            4,
1149            0,
1150        ),
1151        '{' => (
1152            &[
1153                0b0000110000000000,
1154                0b0001100000000000,
1155                0b0001100000000000,
1156                0b0001100000000000,
1157                0b0011000000000000,
1158                0b0001100000000000,
1159                0b0001100000000000,
1160                0b0001100000000000,
1161                0b0000110000000000,
1162            ],
1163            4,
1164            0,
1165        ),
1166        '}' => (
1167            &[
1168                0b0011000000000000,
1169                0b0001100000000000,
1170                0b0001100000000000,
1171                0b0001100000000000,
1172                0b0000110000000000,
1173                0b0001100000000000,
1174                0b0001100000000000,
1175                0b0001100000000000,
1176                0b0011000000000000,
1177            ],
1178            4,
1179            0,
1180        ),
1181        '°' => (
1182            &[0b0011100000000000, 0b0010100000000000, 0b0011100000000000],
1183            3,
1184            -6,
1185        ),
1186        'Ä' => (
1187            &[
1188                0b0001001000000000,
1189                0b0000000000000000,
1190                0b0001111000000000,
1191                0b0011001100000000,
1192                0b0011001100000000,
1193                0b0011001100000000,
1194                0b0011111100000000,
1195                0b0011001100000000,
1196                0b0011001100000000,
1197                0b0011001100000000,
1198                0b0011001100000000,
1199            ],
1200            6,
1201            0,
1202        ),
1203        'Ö' => (
1204            &[
1205                0b0001001000000000,
1206                0b0000000000000000,
1207                0b0001111000000000,
1208                0b0011001100000000,
1209                0b0011001100000000,
1210                0b0011001100000000,
1211                0b0011001100000000,
1212                0b0011001100000000,
1213                0b0011001100000000,
1214                0b0011001100000000,
1215                0b0001111000000000,
1216            ],
1217            6,
1218            0,
1219        ),
1220        'Ü' => (
1221            &[
1222                0b0001001000000000,
1223                0b0000000000000000,
1224                0b0011001100000000,
1225                0b0011001100000000,
1226                0b0011001100000000,
1227                0b0011001100000000,
1228                0b0011001100000000,
1229                0b0011001100000000,
1230                0b0011001100000000,
1231                0b0011001100000000,
1232                0b0001111000000000,
1233            ],
1234            6,
1235            0,
1236        ),
1237        'ä' => (
1238            &[
1239                0b0001001000000000,
1240                0b0000000000000000,
1241                0b0001111000000000,
1242                0b0000001100000000,
1243                0b0001111100000000,
1244                0b0011001100000000,
1245                0b0011001100000000,
1246                0b0011001100000000,
1247                0b0001111100000000,
1248            ],
1249            6,
1250            0,
1251        ),
1252        'ö' => (
1253            &[
1254                0b0001001000000000,
1255                0b0000000000000000,
1256                0b0001111000000000,
1257                0b0011001100000000,
1258                0b0011001100000000,
1259                0b0011001100000000,
1260                0b0011001100000000,
1261                0b0011001100000000,
1262                0b0001111000000000,
1263            ],
1264            6,
1265            0,
1266        ),
1267        'ü' => (
1268            &[
1269                0b0001001000000000,
1270                0b0000000000000000,
1271                0b0011001100000000,
1272                0b0011001100000000,
1273                0b0011001100000000,
1274                0b0011001100000000,
1275                0b0011001100000000,
1276                0b0011001100000000,
1277                0b0001111000000000,
1278            ],
1279            6,
1280            0,
1281        ),
1282        'ß' => (
1283            &[
1284                0b0001111000000000,
1285                0b0011001100000000,
1286                0b0011001100000000,
1287                0b0011001100000000,
1288                0b0011011000000000,
1289                0b0011001100000000,
1290                0b0011001100000000,
1291                0b0011001100000000,
1292                0b0011011000000000,
1293            ],
1294            6,
1295            0,
1296        ),
1297        '$' => (
1298            &[
1299                0b0000011000000000,
1300                0b0001111110000000,
1301                0b0011011001000000,
1302                0b0011011000000000,
1303                0b0011011000000000,
1304                0b0001111110000000,
1305                0b0000011011000000,
1306                0b0000011011000000,
1307                0b0010011011000000,
1308                0b0001111110000000,
1309                0b0000011000000000,
1310            ],
1311            8,
1312            1,
1313        ),
1314        '€' => (
1315            &[
1316                0b0000111100000000,
1317                0b0001100010000000,
1318                0b0001100000000000,
1319                0b0011111000000000,
1320                0b0001100000000000,
1321                0b0011111000000000,
1322                0b0001100000000000,
1323                0b0001100010000000,
1324                0b0000111100000000,
1325            ],
1326            7,
1327            0,
1328        ),
1329        ' ' => (&[], 2, 0),
1330        _ => (&[], -2, 0),
1331    }
1332}