prescript/
encoding.rs

1use super::{Name, name};
2use crate::sname;
3use educe::Educe;
4use std::array::from_fn;
5
6/// Encoding for Type1 and other font types except Type0, which allows
7/// char code larger than u8.
8/// map char code (u8) to glyph name
9#[derive(Debug, PartialEq, Clone, Educe)]
10#[educe(Deref, DerefMut)]
11pub struct Encoding([Name; 256]);
12
13impl Encoding {
14    #[inline]
15    pub const fn new(names: [Name; 256]) -> Self {
16        Self(names)
17    }
18
19    #[inline]
20    pub fn from(names: [&str; 256]) -> Self {
21        Self(from_fn(|i| name(names[i])))
22    }
23
24    #[inline]
25    pub fn get_name(&self, ch: u8) -> &Name {
26        &self.0[ch as usize]
27    }
28
29    /// Get glyph name for char code.
30    #[inline]
31    pub fn get_str(&self, ch: u8) -> &str {
32        self.0[ch as usize].as_str()
33    }
34
35    pub fn predefined(name: &Name) -> Option<Self> {
36        if *name == sname("MacRomanEncoding") {
37            Some(Self::MAC_ROMAN)
38        } else if *name == sname("MacExpertEncoding") {
39            Some(Self::MAC_EXPERT)
40        } else if *name == sname("WinAnsiEncoding") {
41            Some(Self::WIN_ANSI)
42        } else if *name == sname("StandardEncoding") {
43            Some(Self::STANDARD)
44        } else if *name == sname("Symbol") {
45            Some(Self::SYMBOL)
46        } else if *name == sname("ZapfDingbats") {
47            Some(Self::ZAPFDINGBATS)
48        } else {
49            None
50        }
51    }
52}
53
54impl Default for Encoding {
55    /// Returns Encoding that all items are NOTDEF
56    fn default() -> Self {
57        Self::new(from_fn(|_| sname(".notdef")))
58    }
59}
60
61impl Encoding {
62    pub const MAC_EXPERT: Self = Self([
63        sname(".notdef"),
64        sname(".notdef"),
65        sname(".notdef"),
66        sname(".notdef"),
67        sname(".notdef"),
68        sname(".notdef"),
69        sname(".notdef"),
70        sname(".notdef"),
71        sname(".notdef"),
72        sname(".notdef"),
73        sname(".notdef"),
74        sname(".notdef"),
75        sname(".notdef"),
76        sname(".notdef"),
77        sname(".notdef"),
78        sname(".notdef"),
79        sname(".notdef"),
80        sname(".notdef"),
81        sname(".notdef"),
82        sname(".notdef"),
83        sname(".notdef"),
84        sname(".notdef"),
85        sname(".notdef"),
86        sname(".notdef"),
87        sname(".notdef"),
88        sname(".notdef"),
89        sname(".notdef"),
90        sname(".notdef"),
91        sname(".notdef"),
92        sname(".notdef"),
93        sname(".notdef"),
94        sname(".notdef"),
95        sname("space"),
96        sname("exclamsmall"),
97        sname("Hungarumlautsmall"),
98        sname("centoldstyle"),
99        sname("dollaroldstyle"),
100        sname("dollarsuperior"),
101        sname("ampersandsmall"),
102        sname("Acutesmall"),
103        sname("parenleftsuperior"),
104        sname("parenrightsuperior"),
105        sname("twodotenleader"),
106        sname("onedotenleader"),
107        sname("comma"),
108        sname("hyphen"),
109        sname("period"),
110        sname("fraction"),
111        sname("zerooldstyle"),
112        sname("oneoldstyle"),
113        sname("twooldstyle"),
114        sname("threeoldstyle"),
115        sname("fouroldstyle"),
116        sname("fiveoldstyle"),
117        sname("sixoldstyle"),
118        sname("sevenoldstyle"),
119        sname("eightoldstyle"),
120        sname("nineoldstyle"),
121        sname("colon"),
122        sname("semicolon"),
123        sname(".notdef"),
124        sname("threequartersemdash"),
125        sname(".notdef"),
126        sname("questionsmall"),
127        sname(".notdef"),
128        sname(".notdef"),
129        sname(".notdef"),
130        sname(".notdef"),
131        sname("Ethsmall"),
132        sname(".notdef"),
133        sname(".notdef"),
134        sname("onequarter"),
135        sname("onehalf"),
136        sname("threequarters"),
137        sname("oneeighth"),
138        sname("threeeighths"),
139        sname("fiveeighths"),
140        sname("seveneighths"),
141        sname("onethird"),
142        sname("twothirds"),
143        sname(".notdef"),
144        sname(".notdef"),
145        sname(".notdef"),
146        sname(".notdef"),
147        sname(".notdef"),
148        sname(".notdef"),
149        sname("ff"),
150        sname("fi"),
151        sname("fl"),
152        sname("ffi"),
153        sname("ffl"),
154        sname("parenleftinferior"),
155        sname(".notdef"),
156        sname("parenrightinferior"),
157        sname("Circumflexsmall"),
158        sname("hypheninferior"),
159        sname("Gravesmall"),
160        sname("Asmall"),
161        sname("Bsmall"),
162        sname("Csmall"),
163        sname("Dsmall"),
164        sname("Esmall"),
165        sname("Fsmall"),
166        sname("Gsmall"),
167        sname("Hsmall"),
168        sname("Ismall"),
169        sname("Jsmall"),
170        sname("Ksmall"),
171        sname("Lsmall"),
172        sname("Msmall"),
173        sname("Nsmall"),
174        sname("Osmall"),
175        sname("Psmall"),
176        sname("Qsmall"),
177        sname("Rsmall"),
178        sname("Ssmall"),
179        sname("Tsmall"),
180        sname("Usmall"),
181        sname("Vsmall"),
182        sname("Wsmall"),
183        sname("Xsmall"),
184        sname("Ysmall"),
185        sname("Zsmall"),
186        sname("colonmonetary"),
187        sname("onefitted"),
188        sname("rupiah"),
189        sname("Tildesmall"),
190        sname(".notdef"),
191        sname(".notdef"),
192        sname("asuperior"),
193        sname("centsuperior"),
194        sname(".notdef"),
195        sname(".notdef"),
196        sname(".notdef"),
197        sname(".notdef"),
198        sname("Aacutesmall"),
199        sname("Agravesmall"),
200        sname("Acircumflexsmall"),
201        sname("Adieresissmall"),
202        sname("Atildesmall"),
203        sname("Aringsmall"),
204        sname("Ccedillasmall"),
205        sname("Eacutesmall"),
206        sname("Egravesmall"),
207        sname("Ecircumflexsmall"),
208        sname("Edieresissmall"),
209        sname("Iacutesmall"),
210        sname("Igravesmall"),
211        sname("Icircumflexsmall"),
212        sname("Idieresissmall"),
213        sname("Ntildesmall"),
214        sname("Oacutesmall"),
215        sname("Ogravesmall"),
216        sname("Ocircumflexsmall"),
217        sname("Odieresissmall"),
218        sname("Otildesmall"),
219        sname("Uacutesmall"),
220        sname("Ugravesmall"),
221        sname("Ucircumflexsmall"),
222        sname("Udieresissmall"),
223        sname(".notdef"),
224        sname("eightsuperior"),
225        sname("fourinferior"),
226        sname("threeinferior"),
227        sname("sixinferior"),
228        sname("eightinferior"),
229        sname("seveninferior"),
230        sname("Scaronsmall"),
231        sname(".notdef"),
232        sname("centinferior"),
233        sname("twoinferior"),
234        sname(".notdef"),
235        sname("Dieresissmall"),
236        sname(".notdef"),
237        sname("Caronsmall"),
238        sname("osuperior"),
239        sname("fiveinferior"),
240        sname(".notdef"),
241        sname("commainferior"),
242        sname("periodinferior"),
243        sname("Yacutesmall"),
244        sname(".notdef"),
245        sname("dollarinferior"),
246        sname(".notdef"),
247        sname(".notdef"),
248        sname("Thornsmall"),
249        sname(".notdef"),
250        sname("nineinferior"),
251        sname("zeroinferior"),
252        sname("Zcaronsmall"),
253        sname("AEsmall"),
254        sname("Oslashsmall"),
255        sname("questiondownsmall"),
256        sname("oneinferior"),
257        sname("Lslashsmall"),
258        sname(".notdef"),
259        sname(".notdef"),
260        sname(".notdef"),
261        sname(".notdef"),
262        sname(".notdef"),
263        sname(".notdef"),
264        sname("Cedillasmall"),
265        sname(".notdef"),
266        sname(".notdef"),
267        sname(".notdef"),
268        sname(".notdef"),
269        sname(".notdef"),
270        sname("OEsmall"),
271        sname("figuredash"),
272        sname("hyphensuperior"),
273        sname(".notdef"),
274        sname(".notdef"),
275        sname(".notdef"),
276        sname(".notdef"),
277        sname("exclamdownsmall"),
278        sname(".notdef"),
279        sname("Ydieresissmall"),
280        sname(".notdef"),
281        sname("onesuperior"),
282        sname("twosuperior"),
283        sname("threesuperior"),
284        sname("foursuperior"),
285        sname("fivesuperior"),
286        sname("sixsuperior"),
287        sname("sevensuperior"),
288        sname("ninesuperior"),
289        sname("zerosuperior"),
290        sname(".notdef"),
291        sname("esuperior"),
292        sname("rsuperior"),
293        sname("tsuperior"),
294        sname(".notdef"),
295        sname(".notdef"),
296        sname("isuperior"),
297        sname("ssuperior"),
298        sname("dsuperior"),
299        sname(".notdef"),
300        sname(".notdef"),
301        sname(".notdef"),
302        sname(".notdef"),
303        sname(".notdef"),
304        sname("lsuperior"),
305        sname("Ogoneksmall"),
306        sname("Brevesmall"),
307        sname("Macronsmall"),
308        sname("bsuperior"),
309        sname("nsuperior"),
310        sname("msuperior"),
311        sname("commasuperior"),
312        sname("periodsuperior"),
313        sname("Dotaccentsmall"),
314        sname("Ringsmall"),
315        sname(".notdef"),
316        sname(".notdef"),
317        sname(".notdef"),
318        sname(".notdef"),
319    ]);
320    pub const MAC_ROMAN: Self = Self([
321        sname(".notdef"),
322        sname(".notdef"),
323        sname(".notdef"),
324        sname(".notdef"),
325        sname(".notdef"),
326        sname(".notdef"),
327        sname(".notdef"),
328        sname(".notdef"),
329        sname(".notdef"),
330        sname(".notdef"),
331        sname(".notdef"),
332        sname(".notdef"),
333        sname(".notdef"),
334        sname(".notdef"),
335        sname(".notdef"),
336        sname(".notdef"),
337        sname(".notdef"),
338        sname(".notdef"),
339        sname(".notdef"),
340        sname(".notdef"),
341        sname(".notdef"),
342        sname(".notdef"),
343        sname(".notdef"),
344        sname(".notdef"),
345        sname(".notdef"),
346        sname(".notdef"),
347        sname(".notdef"),
348        sname(".notdef"),
349        sname(".notdef"),
350        sname(".notdef"),
351        sname(".notdef"),
352        sname(".notdef"),
353        sname("space"),
354        sname("exclam"),
355        sname("quotedbl"),
356        sname("numbersign"),
357        sname("dollar"),
358        sname("percent"),
359        sname("ampersand"),
360        sname("quotesingle"),
361        sname("parenleft"),
362        sname("parenright"),
363        sname("asterisk"),
364        sname("plus"),
365        sname("comma"),
366        sname("hyphen"),
367        sname("period"),
368        sname("slash"),
369        sname("zero"),
370        sname("one"),
371        sname("two"),
372        sname("three"),
373        sname("four"),
374        sname("five"),
375        sname("six"),
376        sname("seven"),
377        sname("eight"),
378        sname("nine"),
379        sname("colon"),
380        sname("semicolon"),
381        sname("less"),
382        sname("equal"),
383        sname("greater"),
384        sname("question"),
385        sname("at"),
386        sname("A"),
387        sname("B"),
388        sname("C"),
389        sname("D"),
390        sname("E"),
391        sname("F"),
392        sname("G"),
393        sname("H"),
394        sname("I"),
395        sname("J"),
396        sname("K"),
397        sname("L"),
398        sname("M"),
399        sname("N"),
400        sname("O"),
401        sname("P"),
402        sname("Q"),
403        sname("R"),
404        sname("S"),
405        sname("T"),
406        sname("U"),
407        sname("V"),
408        sname("W"),
409        sname("X"),
410        sname("Y"),
411        sname("Z"),
412        sname("bracketleft"),
413        sname("backslash"),
414        sname("bracketright"),
415        sname("asciicircum"),
416        sname("underscore"),
417        sname("grave"),
418        sname("a"),
419        sname("b"),
420        sname("c"),
421        sname("d"),
422        sname("e"),
423        sname("f"),
424        sname("g"),
425        sname("h"),
426        sname("i"),
427        sname("j"),
428        sname("k"),
429        sname("l"),
430        sname("m"),
431        sname("n"),
432        sname("o"),
433        sname("p"),
434        sname("q"),
435        sname("r"),
436        sname("s"),
437        sname("t"),
438        sname("u"),
439        sname("v"),
440        sname("w"),
441        sname("x"),
442        sname("y"),
443        sname("z"),
444        sname("braceleft"),
445        sname("bar"),
446        sname("braceright"),
447        sname("asciitilde"),
448        sname(".notdef"),
449        sname("Adieresis"),
450        sname("Aring"),
451        sname("Ccedilla"),
452        sname("Eacute"),
453        sname("Ntilde"),
454        sname("Odieresis"),
455        sname("Udieresis"),
456        sname("aacute"),
457        sname("agrave"),
458        sname("acircumflex"),
459        sname("adieresis"),
460        sname("atilde"),
461        sname("aring"),
462        sname("ccedilla"),
463        sname("eacute"),
464        sname("egrave"),
465        sname("ecircumflex"),
466        sname("edieresis"),
467        sname("iacute"),
468        sname("igrave"),
469        sname("icircumflex"),
470        sname("idieresis"),
471        sname("ntilde"),
472        sname("oacute"),
473        sname("ograve"),
474        sname("ocircumflex"),
475        sname("odieresis"),
476        sname("otilde"),
477        sname("uacute"),
478        sname("ugrave"),
479        sname("ucircumflex"),
480        sname("udieresis"),
481        sname("dagger"),
482        sname("degree"),
483        sname("cent"),
484        sname("sterling"),
485        sname("section"),
486        sname("bullet"),
487        sname("paragraph"),
488        sname("germandbls"),
489        sname("registered"),
490        sname("copyright"),
491        sname("trademark"),
492        sname("acute"),
493        sname("dieresis"),
494        sname("notequal"),
495        sname("AE"),
496        sname("Oslash"),
497        sname("infinity"),
498        sname("plusminus"),
499        sname("lessequal"),
500        sname("greaterequal"),
501        sname("yen"),
502        sname("mu"),
503        sname("partialdiff"),
504        sname("summation"),
505        sname("product"),
506        sname("pi"),
507        sname("integral"),
508        sname("ordfeminine"),
509        sname("ordmasculine"),
510        sname("Omega"),
511        sname("ae"),
512        sname("oslash"),
513        sname("questiondown"),
514        sname("exclamdown"),
515        sname("logicalnot"),
516        sname("radical"),
517        sname("florin"),
518        sname("approxequal"),
519        sname("Delta"),
520        sname("guillemotleft"),
521        sname("guillemotright"),
522        sname("ellipsis"),
523        sname("space"),
524        sname("Agrave"),
525        sname("Atilde"),
526        sname("Otilde"),
527        sname("OE"),
528        sname("oe"),
529        sname("endash"),
530        sname("emdash"),
531        sname("quotedblleft"),
532        sname("quotedblright"),
533        sname("quoteleft"),
534        sname("quoteright"),
535        sname("divide"),
536        sname("lozenge"),
537        sname("ydieresis"),
538        sname("Ydieresis"),
539        sname("fraction"),
540        sname("currency"),
541        sname("guilsinglleft"),
542        sname("guilsinglright"),
543        sname("fi"),
544        sname("fl"),
545        sname("daggerdbl"),
546        sname("periodcentered"),
547        sname("quotesinglbase"),
548        sname("quotedblbase"),
549        sname("perthousand"),
550        sname("Acircumflex"),
551        sname("Ecircumflex"),
552        sname("Aacute"),
553        sname("Edieresis"),
554        sname("Egrave"),
555        sname("Iacute"),
556        sname("Icircumflex"),
557        sname("Idieresis"),
558        sname("Igrave"),
559        sname("Oacute"),
560        sname("Ocircumflex"),
561        sname("apple"),
562        sname("Ograve"),
563        sname("Uacute"),
564        sname("Ucircumflex"),
565        sname("Ugrave"),
566        sname("dotlessi"),
567        sname("circumflex"),
568        sname("tilde"),
569        sname("macron"),
570        sname("breve"),
571        sname("dotaccent"),
572        sname("ring"),
573        sname("cedilla"),
574        sname("hungarumlaut"),
575        sname("ogonek"),
576        sname("caron"),
577    ]);
578    pub const STANDARD: Self = Self([
579        sname(".notdef"),
580        sname(".notdef"),
581        sname(".notdef"),
582        sname(".notdef"),
583        sname(".notdef"),
584        sname(".notdef"),
585        sname(".notdef"),
586        sname(".notdef"),
587        sname(".notdef"),
588        sname(".notdef"),
589        sname(".notdef"),
590        sname(".notdef"),
591        sname(".notdef"),
592        sname(".notdef"),
593        sname(".notdef"),
594        sname(".notdef"),
595        sname(".notdef"),
596        sname(".notdef"),
597        sname(".notdef"),
598        sname(".notdef"),
599        sname(".notdef"),
600        sname(".notdef"),
601        sname(".notdef"),
602        sname(".notdef"),
603        sname(".notdef"),
604        sname(".notdef"),
605        sname(".notdef"),
606        sname(".notdef"),
607        sname(".notdef"),
608        sname(".notdef"),
609        sname(".notdef"),
610        sname(".notdef"),
611        sname("space"),
612        sname("exclam"),
613        sname("quotedbl"),
614        sname("numbersign"),
615        sname("dollar"),
616        sname("percent"),
617        sname("ampersand"),
618        sname("quotesingle"),
619        sname("parenleft"),
620        sname("parenright"),
621        sname("asterisk"),
622        sname("plus"),
623        sname("comma"),
624        sname("hyphen"),
625        sname("period"),
626        sname("slash"),
627        sname("zero"),
628        sname("one"),
629        sname("two"),
630        sname("three"),
631        sname("four"),
632        sname("five"),
633        sname("six"),
634        sname("seven"),
635        sname("eight"),
636        sname("nine"),
637        sname("colon"),
638        sname("semicolon"),
639        sname("less"),
640        sname("equal"),
641        sname("greater"),
642        sname("question"),
643        sname("at"),
644        sname("A"),
645        sname("B"),
646        sname("C"),
647        sname("D"),
648        sname("E"),
649        sname("F"),
650        sname("G"),
651        sname("H"),
652        sname("I"),
653        sname("J"),
654        sname("K"),
655        sname("L"),
656        sname("M"),
657        sname("N"),
658        sname("O"),
659        sname("P"),
660        sname("Q"),
661        sname("R"),
662        sname("S"),
663        sname("T"),
664        sname("U"),
665        sname("V"),
666        sname("W"),
667        sname("X"),
668        sname("Y"),
669        sname("Z"),
670        sname("bracketleft"),
671        sname("backslash"),
672        sname("bracketright"),
673        sname("asciicircum"),
674        sname("underscore"),
675        sname("grave"),
676        sname("a"),
677        sname("b"),
678        sname("c"),
679        sname("d"),
680        sname("e"),
681        sname("f"),
682        sname("g"),
683        sname("h"),
684        sname("i"),
685        sname("j"),
686        sname("k"),
687        sname("l"),
688        sname("m"),
689        sname("n"),
690        sname("o"),
691        sname("p"),
692        sname("q"),
693        sname("r"),
694        sname("s"),
695        sname("t"),
696        sname("u"),
697        sname("v"),
698        sname("w"),
699        sname("x"),
700        sname("y"),
701        sname("z"),
702        sname("braceleft"),
703        sname("bar"),
704        sname("braceright"),
705        sname("asciitilde"),
706        sname("bullet"),
707        sname("Euro"),
708        sname("bullet"),
709        sname("quotesinglbase"),
710        sname("florin"),
711        sname("quotedblbase"),
712        sname("ellipsis"),
713        sname("dagger"),
714        sname("daggerdbl"),
715        sname("circumflex"),
716        sname("perthousand"),
717        sname("Scaron"),
718        sname("guilsinglleft"),
719        sname("OE"),
720        sname("bullet"),
721        sname("Zcaron"),
722        sname("bullet"),
723        sname("bullet"),
724        sname("quoteleft"),
725        sname("quoteright"),
726        sname("quotedblleft"),
727        sname("quotedblright"),
728        sname("bullet"),
729        sname("endash"),
730        sname("emdash"),
731        sname("tilde"),
732        sname("trademark"),
733        sname("scaron"),
734        sname("guilsinglright"),
735        sname("oe"),
736        sname("bullet"),
737        sname("zcaron"),
738        sname("Ydieresis"),
739        sname("space"),
740        sname("exclamdown"),
741        sname("cent"),
742        sname("sterling"),
743        sname("currency"),
744        sname("yen"),
745        sname("brokenbar"),
746        sname("section"),
747        sname("dieresis"),
748        sname("copyright"),
749        sname("ordfeminine"),
750        sname("guillemotleft"),
751        sname("logicalnot"),
752        sname("hyphen"),
753        sname("registered"),
754        sname("macron"),
755        sname("degree"),
756        sname("plusminus"),
757        sname("twosuperior"),
758        sname("threesuperior"),
759        sname("acute"),
760        sname("mu"),
761        sname("paragraph"),
762        sname("periodcentered"),
763        sname("cedilla"),
764        sname("onesuperior"),
765        sname("ordmasculine"),
766        sname("guillemotright"),
767        sname("onequarter"),
768        sname("onehalf"),
769        sname("threequarters"),
770        sname("questiondown"),
771        sname("Agrave"),
772        sname("Aacute"),
773        sname("Acircumflex"),
774        sname("Atilde"),
775        sname("Adieresis"),
776        sname("Aring"),
777        sname("AE"),
778        sname("Ccedilla"),
779        sname("Egrave"),
780        sname("Eacute"),
781        sname("Ecircumflex"),
782        sname("Edieresis"),
783        sname("Igrave"),
784        sname("Iacute"),
785        sname("Icircumflex"),
786        sname("Idieresis"),
787        sname("Eth"),
788        sname("Ntilde"),
789        sname("Ograve"),
790        sname("Oacute"),
791        sname("Ocircumflex"),
792        sname("Otilde"),
793        sname("Odieresis"),
794        sname("multiply"),
795        sname("Oslash"),
796        sname("Ugrave"),
797        sname("Uacute"),
798        sname("Ucircumflex"),
799        sname("Udieresis"),
800        sname("Yacute"),
801        sname("Thorn"),
802        sname("germandbls"),
803        sname("agrave"),
804        sname("aacute"),
805        sname("acircumflex"),
806        sname("atilde"),
807        sname("adieresis"),
808        sname("aring"),
809        sname("ae"),
810        sname("ccedilla"),
811        sname("egrave"),
812        sname("eacute"),
813        sname("ecircumflex"),
814        sname("edieresis"),
815        sname("igrave"),
816        sname("iacute"),
817        sname("icircumflex"),
818        sname("idieresis"),
819        sname("eth"),
820        sname("ntilde"),
821        sname("ograve"),
822        sname("oacute"),
823        sname("ocircumflex"),
824        sname("otilde"),
825        sname("odieresis"),
826        sname("divide"),
827        sname("oslash"),
828        sname("ugrave"),
829        sname("uacute"),
830        sname("ucircumflex"),
831        sname("udieresis"),
832        sname("yacute"),
833        sname("thorn"),
834        sname("ydieresis"),
835    ]);
836    pub const SYMBOL: Self = Self([
837        sname(".notdef"),
838        sname(".notdef"),
839        sname(".notdef"),
840        sname(".notdef"),
841        sname(".notdef"),
842        sname(".notdef"),
843        sname(".notdef"),
844        sname(".notdef"),
845        sname(".notdef"),
846        sname(".notdef"),
847        sname(".notdef"),
848        sname(".notdef"),
849        sname(".notdef"),
850        sname(".notdef"),
851        sname(".notdef"),
852        sname(".notdef"),
853        sname(".notdef"),
854        sname(".notdef"),
855        sname(".notdef"),
856        sname(".notdef"),
857        sname(".notdef"),
858        sname(".notdef"),
859        sname(".notdef"),
860        sname(".notdef"),
861        sname(".notdef"),
862        sname(".notdef"),
863        sname(".notdef"),
864        sname(".notdef"),
865        sname(".notdef"),
866        sname(".notdef"),
867        sname(".notdef"),
868        sname(".notdef"),
869        sname("space"),
870        sname("exclam"),
871        sname("universal"),
872        sname("numbersign"),
873        sname("existential"),
874        sname("percent"),
875        sname("ampersand"),
876        sname("suchthat"),
877        sname("parenleft"),
878        sname("parenright"),
879        sname("asteriskmath"),
880        sname("plus"),
881        sname("comma"),
882        sname("minus"),
883        sname("period"),
884        sname("slash"),
885        sname("zero"),
886        sname("one"),
887        sname("two"),
888        sname("three"),
889        sname("four"),
890        sname("five"),
891        sname("six"),
892        sname("seven"),
893        sname("eight"),
894        sname("nine"),
895        sname("colon"),
896        sname("semicolon"),
897        sname("less"),
898        sname("equal"),
899        sname("greater"),
900        sname("question"),
901        sname("congruent"),
902        sname("Alpha"),
903        sname("Beta"),
904        sname("Chi"),
905        sname("Delta"),
906        sname("Epsilon"),
907        sname("Phi"),
908        sname("Gamma"),
909        sname("Eta"),
910        sname("Iota"),
911        sname("theta1"),
912        sname("Kappa"),
913        sname("Lambda"),
914        sname("Mu"),
915        sname("Nu"),
916        sname("Omicron"),
917        sname("Pi"),
918        sname("Theta"),
919        sname("Rho"),
920        sname("Sigma"),
921        sname("Tau"),
922        sname("Upsilon"),
923        sname("sigma1"),
924        sname("Omega"),
925        sname("Xi"),
926        sname("Psi"),
927        sname("Zeta"),
928        sname("bracketleft"),
929        sname("therefore"),
930        sname("bracketright"),
931        sname("perpendicular"),
932        sname("underscore"),
933        sname("radicalex"),
934        sname("alpha"),
935        sname("beta"),
936        sname("chi"),
937        sname("delta"),
938        sname("epsilon"),
939        sname("phi"),
940        sname("gamma"),
941        sname("eta"),
942        sname("iota"),
943        sname("phi1"),
944        sname("kappa"),
945        sname("lambda"),
946        sname("mu"),
947        sname("nu"),
948        sname("omicron"),
949        sname("pi"),
950        sname("theta"),
951        sname("rho"),
952        sname("sigma"),
953        sname("tau"),
954        sname("upsilon"),
955        sname("omega1"),
956        sname("omega"),
957        sname("xi"),
958        sname("psi"),
959        sname("zeta"),
960        sname("braceleft"),
961        sname("bar"),
962        sname("braceright"),
963        sname("similar"),
964        sname(".notdef"),
965        sname(".notdef"),
966        sname(".notdef"),
967        sname(".notdef"),
968        sname(".notdef"),
969        sname(".notdef"),
970        sname(".notdef"),
971        sname(".notdef"),
972        sname(".notdef"),
973        sname(".notdef"),
974        sname(".notdef"),
975        sname(".notdef"),
976        sname(".notdef"),
977        sname(".notdef"),
978        sname(".notdef"),
979        sname(".notdef"),
980        sname(".notdef"),
981        sname(".notdef"),
982        sname(".notdef"),
983        sname(".notdef"),
984        sname(".notdef"),
985        sname(".notdef"),
986        sname(".notdef"),
987        sname(".notdef"),
988        sname(".notdef"),
989        sname(".notdef"),
990        sname(".notdef"),
991        sname(".notdef"),
992        sname(".notdef"),
993        sname(".notdef"),
994        sname(".notdef"),
995        sname(".notdef"),
996        sname(".notdef"),
997        sname(".notdef"),
998        sname("Upsilon1"),
999        sname("minute"),
1000        sname("lessequal"),
1001        sname("fraction"),
1002        sname("infinity"),
1003        sname("florin"),
1004        sname("club"),
1005        sname("diamond"),
1006        sname("heart"),
1007        sname("spade"),
1008        sname("arrowboth"),
1009        sname("arrowleft"),
1010        sname("arrowup"),
1011        sname("arrowright"),
1012        sname("arrowdown"),
1013        sname("degree"),
1014        sname("plusminus"),
1015        sname("second"),
1016        sname("greaterequal"),
1017        sname("multiply"),
1018        sname("proportional"),
1019        sname("partialdiff"),
1020        sname("bullet"),
1021        sname("divide"),
1022        sname("notequal"),
1023        sname("equivalence"),
1024        sname("approxequal"),
1025        sname("ellipsis"),
1026        sname("arrowvertex"),
1027        sname("arrowhorizex"),
1028        sname("carriagereturn"),
1029        sname("aleph"),
1030        sname("Ifraktur"),
1031        sname("Rfraktur"),
1032        sname("weierstrass"),
1033        sname("circlemultiply"),
1034        sname("circleplus"),
1035        sname("emptyset"),
1036        sname("intersection"),
1037        sname("union"),
1038        sname("propersuperset"),
1039        sname("reflexsuperset"),
1040        sname("notsubset"),
1041        sname("propersubset"),
1042        sname("reflexsubset"),
1043        sname("element"),
1044        sname("notelement"),
1045        sname("angle"),
1046        sname("gradient"),
1047        sname("registerserif"),
1048        sname("copyrightserif"),
1049        sname("trademarkserif"),
1050        sname("product"),
1051        sname("radical"),
1052        sname("dotmath"),
1053        sname("logicalnot"),
1054        sname("logicaland"),
1055        sname("logicalor"),
1056        sname("arrowdblboth"),
1057        sname("arrowdblleft"),
1058        sname("arrowdblup"),
1059        sname("arrowdblright"),
1060        sname("arrowdbldown"),
1061        sname("lozenge"),
1062        sname("angleleft"),
1063        sname("registersans"),
1064        sname("copyrightsans"),
1065        sname("trademarksans"),
1066        sname("summation"),
1067        sname("parenlefttp"),
1068        sname("parenleftex"),
1069        sname("parenleftbt"),
1070        sname("bracketlefttp"),
1071        sname("bracketleftex"),
1072        sname("bracketleftbt"),
1073        sname("bracelefttp"),
1074        sname("braceleftmid"),
1075        sname("braceleftbt"),
1076        sname("braceex"),
1077        sname(".notdef"),
1078        sname("angleright"),
1079        sname("integral"),
1080        sname("integraltp"),
1081        sname("integralex"),
1082        sname("integralbt"),
1083        sname("parenrighttp"),
1084        sname("parenrightex"),
1085        sname("parenrightbt"),
1086        sname("bracketrighttp"),
1087        sname("bracketrightex"),
1088        sname("bracketrightbt"),
1089        sname("bracerighttp"),
1090        sname("bracerightmid"),
1091        sname("bracerightbt"),
1092        sname(".notdef"),
1093    ]);
1094    pub const WIN_ANSI: Self = Self([
1095        sname(".notdef"),
1096        sname(".notdef"),
1097        sname(".notdef"),
1098        sname(".notdef"),
1099        sname(".notdef"),
1100        sname(".notdef"),
1101        sname(".notdef"),
1102        sname(".notdef"),
1103        sname(".notdef"),
1104        sname(".notdef"),
1105        sname(".notdef"),
1106        sname(".notdef"),
1107        sname(".notdef"),
1108        sname(".notdef"),
1109        sname(".notdef"),
1110        sname(".notdef"),
1111        sname(".notdef"),
1112        sname(".notdef"),
1113        sname(".notdef"),
1114        sname(".notdef"),
1115        sname(".notdef"),
1116        sname(".notdef"),
1117        sname(".notdef"),
1118        sname(".notdef"),
1119        sname(".notdef"),
1120        sname(".notdef"),
1121        sname(".notdef"),
1122        sname(".notdef"),
1123        sname(".notdef"),
1124        sname(".notdef"),
1125        sname(".notdef"),
1126        sname(".notdef"),
1127        sname("space"),
1128        sname("exclam"),
1129        sname("quotedbl"),
1130        sname("numbersign"),
1131        sname("dollar"),
1132        sname("percent"),
1133        sname("ampersand"),
1134        sname("quotesingle"),
1135        sname("parenleft"),
1136        sname("parenright"),
1137        sname("asterisk"),
1138        sname("plus"),
1139        sname("comma"),
1140        sname("hyphen"),
1141        sname("period"),
1142        sname("slash"),
1143        sname("zero"),
1144        sname("one"),
1145        sname("two"),
1146        sname("three"),
1147        sname("four"),
1148        sname("five"),
1149        sname("six"),
1150        sname("seven"),
1151        sname("eight"),
1152        sname("nine"),
1153        sname("colon"),
1154        sname("semicolon"),
1155        sname("less"),
1156        sname("equal"),
1157        sname("greater"),
1158        sname("question"),
1159        sname("at"),
1160        sname("A"),
1161        sname("B"),
1162        sname("C"),
1163        sname("D"),
1164        sname("E"),
1165        sname("F"),
1166        sname("G"),
1167        sname("H"),
1168        sname("I"),
1169        sname("J"),
1170        sname("K"),
1171        sname("L"),
1172        sname("M"),
1173        sname("N"),
1174        sname("O"),
1175        sname("P"),
1176        sname("Q"),
1177        sname("R"),
1178        sname("S"),
1179        sname("T"),
1180        sname("U"),
1181        sname("V"),
1182        sname("W"),
1183        sname("X"),
1184        sname("Y"),
1185        sname("Z"),
1186        sname("bracketleft"),
1187        sname("backslash"),
1188        sname("bracketright"),
1189        sname("asciicircum"),
1190        sname("underscore"),
1191        sname("grave"),
1192        sname("a"),
1193        sname("b"),
1194        sname("c"),
1195        sname("d"),
1196        sname("e"),
1197        sname("f"),
1198        sname("g"),
1199        sname("h"),
1200        sname("i"),
1201        sname("j"),
1202        sname("k"),
1203        sname("l"),
1204        sname("m"),
1205        sname("n"),
1206        sname("o"),
1207        sname("p"),
1208        sname("q"),
1209        sname("r"),
1210        sname("s"),
1211        sname("t"),
1212        sname("u"),
1213        sname("v"),
1214        sname("w"),
1215        sname("x"),
1216        sname("y"),
1217        sname("z"),
1218        sname("braceleft"),
1219        sname("bar"),
1220        sname("braceright"),
1221        sname("asciitilde"),
1222        sname("bullet"),
1223        sname("Euro"),
1224        sname("bullet"),
1225        sname("quotesinglbase"),
1226        sname("florin"),
1227        sname("quotedblbase"),
1228        sname("ellipsis"),
1229        sname("dagger"),
1230        sname("daggerdbl"),
1231        sname("circumflex"),
1232        sname("perthousand"),
1233        sname("Scaron"),
1234        sname("guilsinglleft"),
1235        sname("OE"),
1236        sname("bullet"),
1237        sname("Zcaron"),
1238        sname("bullet"),
1239        sname("bullet"),
1240        sname("quoteleft"),
1241        sname("quoteright"),
1242        sname("quotedblleft"),
1243        sname("quotedblright"),
1244        sname("bullet"),
1245        sname("endash"),
1246        sname("emdash"),
1247        sname("tilde"),
1248        sname("trademark"),
1249        sname("scaron"),
1250        sname("guilsinglright"),
1251        sname("oe"),
1252        sname("bullet"),
1253        sname("zcaron"),
1254        sname("Ydieresis"),
1255        sname("space"),
1256        sname("exclamdown"),
1257        sname("cent"),
1258        sname("sterling"),
1259        sname("currency"),
1260        sname("yen"),
1261        sname("brokenbar"),
1262        sname("section"),
1263        sname("dieresis"),
1264        sname("copyright"),
1265        sname("ordfeminine"),
1266        sname("guillemotleft"),
1267        sname("logicalnot"),
1268        sname("hyphen"),
1269        sname("registered"),
1270        sname("macron"),
1271        sname("degree"),
1272        sname("plusminus"),
1273        sname("twosuperior"),
1274        sname("threesuperior"),
1275        sname("acute"),
1276        sname("mu"),
1277        sname("paragraph"),
1278        sname("periodcentered"),
1279        sname("cedilla"),
1280        sname("onesuperior"),
1281        sname("ordmasculine"),
1282        sname("guillemotright"),
1283        sname("onequarter"),
1284        sname("onehalf"),
1285        sname("threequarters"),
1286        sname("questiondown"),
1287        sname("Agrave"),
1288        sname("Aacute"),
1289        sname("Acircumflex"),
1290        sname("Atilde"),
1291        sname("Adieresis"),
1292        sname("Aring"),
1293        sname("AE"),
1294        sname("Ccedilla"),
1295        sname("Egrave"),
1296        sname("Eacute"),
1297        sname("Ecircumflex"),
1298        sname("Edieresis"),
1299        sname("Igrave"),
1300        sname("Iacute"),
1301        sname("Icircumflex"),
1302        sname("Idieresis"),
1303        sname("Eth"),
1304        sname("Ntilde"),
1305        sname("Ograve"),
1306        sname("Oacute"),
1307        sname("Ocircumflex"),
1308        sname("Otilde"),
1309        sname("Odieresis"),
1310        sname("multiply"),
1311        sname("Oslash"),
1312        sname("Ugrave"),
1313        sname("Uacute"),
1314        sname("Ucircumflex"),
1315        sname("Udieresis"),
1316        sname("Yacute"),
1317        sname("Thorn"),
1318        sname("germandbls"),
1319        sname("agrave"),
1320        sname("aacute"),
1321        sname("acircumflex"),
1322        sname("atilde"),
1323        sname("adieresis"),
1324        sname("aring"),
1325        sname("ae"),
1326        sname("ccedilla"),
1327        sname("egrave"),
1328        sname("eacute"),
1329        sname("ecircumflex"),
1330        sname("edieresis"),
1331        sname("igrave"),
1332        sname("iacute"),
1333        sname("icircumflex"),
1334        sname("idieresis"),
1335        sname("eth"),
1336        sname("ntilde"),
1337        sname("ograve"),
1338        sname("oacute"),
1339        sname("ocircumflex"),
1340        sname("otilde"),
1341        sname("odieresis"),
1342        sname("divide"),
1343        sname("oslash"),
1344        sname("ugrave"),
1345        sname("uacute"),
1346        sname("ucircumflex"),
1347        sname("udieresis"),
1348        sname("yacute"),
1349        sname("thorn"),
1350        sname("ydieresis"),
1351    ]);
1352    pub const ZAPFDINGBATS: Self = Self([
1353        sname(".notdef"),
1354        sname(".notdef"),
1355        sname(".notdef"),
1356        sname(".notdef"),
1357        sname(".notdef"),
1358        sname(".notdef"),
1359        sname(".notdef"),
1360        sname(".notdef"),
1361        sname(".notdef"),
1362        sname(".notdef"),
1363        sname(".notdef"),
1364        sname(".notdef"),
1365        sname(".notdef"),
1366        sname(".notdef"),
1367        sname(".notdef"),
1368        sname(".notdef"),
1369        sname(".notdef"),
1370        sname(".notdef"),
1371        sname(".notdef"),
1372        sname(".notdef"),
1373        sname(".notdef"),
1374        sname(".notdef"),
1375        sname(".notdef"),
1376        sname(".notdef"),
1377        sname(".notdef"),
1378        sname(".notdef"),
1379        sname(".notdef"),
1380        sname(".notdef"),
1381        sname(".notdef"),
1382        sname(".notdef"),
1383        sname(".notdef"),
1384        sname(".notdef"),
1385        sname("space"),
1386        sname("a1"),
1387        sname("a2"),
1388        sname("a202"),
1389        sname("a3"),
1390        sname("a4"),
1391        sname("a5"),
1392        sname("a119"),
1393        sname("a118"),
1394        sname("a117"),
1395        sname("a11"),
1396        sname("a12"),
1397        sname("a13"),
1398        sname("a14"),
1399        sname("a15"),
1400        sname("a16"),
1401        sname("a105"),
1402        sname("a17"),
1403        sname("a18"),
1404        sname("a19"),
1405        sname("a20"),
1406        sname("a21"),
1407        sname("a22"),
1408        sname("a23"),
1409        sname("a24"),
1410        sname("a25"),
1411        sname("a26"),
1412        sname("a27"),
1413        sname("a28"),
1414        sname("a6"),
1415        sname("a7"),
1416        sname("a8"),
1417        sname("a9"),
1418        sname("a10"),
1419        sname("a29"),
1420        sname("a30"),
1421        sname("a31"),
1422        sname("a32"),
1423        sname("a33"),
1424        sname("a34"),
1425        sname("a35"),
1426        sname("a36"),
1427        sname("a37"),
1428        sname("a38"),
1429        sname("a39"),
1430        sname("a40"),
1431        sname("a41"),
1432        sname("a42"),
1433        sname("a43"),
1434        sname("a44"),
1435        sname("a45"),
1436        sname("a46"),
1437        sname("a47"),
1438        sname("a48"),
1439        sname("a49"),
1440        sname("a50"),
1441        sname("a51"),
1442        sname("a52"),
1443        sname("a53"),
1444        sname("a54"),
1445        sname("a55"),
1446        sname("a56"),
1447        sname("a57"),
1448        sname("a58"),
1449        sname("a59"),
1450        sname("a60"),
1451        sname("a61"),
1452        sname("a62"),
1453        sname("a63"),
1454        sname("a64"),
1455        sname("a65"),
1456        sname("a66"),
1457        sname("a67"),
1458        sname("a68"),
1459        sname("a69"),
1460        sname("a70"),
1461        sname("a71"),
1462        sname("a72"),
1463        sname("a73"),
1464        sname("a74"),
1465        sname("a203"),
1466        sname("a75"),
1467        sname("a204"),
1468        sname("a76"),
1469        sname("a77"),
1470        sname("a78"),
1471        sname("a79"),
1472        sname("a81"),
1473        sname("a82"),
1474        sname("a83"),
1475        sname("a84"),
1476        sname("a97"),
1477        sname("a98"),
1478        sname("a99"),
1479        sname("a100"),
1480        sname(".notdef"),
1481        sname(".notdef"),
1482        sname(".notdef"),
1483        sname(".notdef"),
1484        sname(".notdef"),
1485        sname(".notdef"),
1486        sname(".notdef"),
1487        sname(".notdef"),
1488        sname(".notdef"),
1489        sname(".notdef"),
1490        sname(".notdef"),
1491        sname(".notdef"),
1492        sname(".notdef"),
1493        sname(".notdef"),
1494        sname(".notdef"),
1495        sname(".notdef"),
1496        sname(".notdef"),
1497        sname(".notdef"),
1498        sname(".notdef"),
1499        sname(".notdef"),
1500        sname(".notdef"),
1501        sname(".notdef"),
1502        sname(".notdef"),
1503        sname(".notdef"),
1504        sname(".notdef"),
1505        sname(".notdef"),
1506        sname(".notdef"),
1507        sname(".notdef"),
1508        sname(".notdef"),
1509        sname(".notdef"),
1510        sname(".notdef"),
1511        sname(".notdef"),
1512        sname(".notdef"),
1513        sname(".notdef"),
1514        sname("a101"),
1515        sname("a102"),
1516        sname("a103"),
1517        sname("a104"),
1518        sname("a106"),
1519        sname("a107"),
1520        sname("a108"),
1521        sname("a112"),
1522        sname("a111"),
1523        sname("a110"),
1524        sname("a109"),
1525        sname("a120"),
1526        sname("a121"),
1527        sname("a122"),
1528        sname("a123"),
1529        sname("a124"),
1530        sname("a125"),
1531        sname("a126"),
1532        sname("a127"),
1533        sname("a128"),
1534        sname("a129"),
1535        sname("a130"),
1536        sname("a131"),
1537        sname("a132"),
1538        sname("a133"),
1539        sname("a134"),
1540        sname("a135"),
1541        sname("a136"),
1542        sname("a137"),
1543        sname("a138"),
1544        sname("a139"),
1545        sname("a140"),
1546        sname("a141"),
1547        sname("a142"),
1548        sname("a143"),
1549        sname("a144"),
1550        sname("a145"),
1551        sname("a146"),
1552        sname("a147"),
1553        sname("a148"),
1554        sname("a149"),
1555        sname("a150"),
1556        sname("a151"),
1557        sname("a152"),
1558        sname("a153"),
1559        sname("a154"),
1560        sname("a155"),
1561        sname("a156"),
1562        sname("a157"),
1563        sname("a158"),
1564        sname("a159"),
1565        sname("a160"),
1566        sname("a161"),
1567        sname("a163"),
1568        sname("a164"),
1569        sname("a196"),
1570        sname("a165"),
1571        sname("a192"),
1572        sname("a166"),
1573        sname("a167"),
1574        sname("a168"),
1575        sname("a169"),
1576        sname("a170"),
1577        sname("a171"),
1578        sname("a172"),
1579        sname("a173"),
1580        sname("a162"),
1581        sname("a174"),
1582        sname("a175"),
1583        sname("a176"),
1584        sname("a177"),
1585        sname("a178"),
1586        sname("a179"),
1587        sname("a193"),
1588        sname("a180"),
1589        sname("a199"),
1590        sname("a181"),
1591        sname("a200"),
1592        sname("a182"),
1593        sname(".notdef"),
1594        sname("a201"),
1595        sname("a183"),
1596        sname("a184"),
1597        sname("a197"),
1598        sname("a185"),
1599        sname("a194"),
1600        sname("a198"),
1601        sname("a186"),
1602        sname("a195"),
1603        sname("a187"),
1604        sname("a188"),
1605        sname("a189"),
1606        sname("a190"),
1607        sname("a191"),
1608        sname(".notdef"),
1609    ]);
1610}