xref: /aosp_15_r20/external/fonttools/Lib/fontTools/ttLib/tables/otData.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1otData = [
2    #
3    # common
4    #
5    ("LookupOrder", []),
6    (
7        "ScriptList",
8        [
9            ("uint16", "ScriptCount", None, None, "Number of ScriptRecords"),
10            (
11                "struct",
12                "ScriptRecord",
13                "ScriptCount",
14                0,
15                "Array of ScriptRecords -listed alphabetically by ScriptTag",
16            ),
17        ],
18    ),
19    (
20        "ScriptRecord",
21        [
22            ("Tag", "ScriptTag", None, None, "4-byte ScriptTag identifier"),
23            (
24                "Offset",
25                "Script",
26                None,
27                None,
28                "Offset to Script table-from beginning of ScriptList",
29            ),
30        ],
31    ),
32    (
33        "Script",
34        [
35            (
36                "Offset",
37                "DefaultLangSys",
38                None,
39                None,
40                "Offset to DefaultLangSys table-from beginning of Script table-may be NULL",
41            ),
42            (
43                "uint16",
44                "LangSysCount",
45                None,
46                None,
47                "Number of LangSysRecords for this script-excluding the DefaultLangSys",
48            ),
49            (
50                "struct",
51                "LangSysRecord",
52                "LangSysCount",
53                0,
54                "Array of LangSysRecords-listed alphabetically by LangSysTag",
55            ),
56        ],
57    ),
58    (
59        "LangSysRecord",
60        [
61            ("Tag", "LangSysTag", None, None, "4-byte LangSysTag identifier"),
62            (
63                "Offset",
64                "LangSys",
65                None,
66                None,
67                "Offset to LangSys table-from beginning of Script table",
68            ),
69        ],
70    ),
71    (
72        "LangSys",
73        [
74            (
75                "Offset",
76                "LookupOrder",
77                None,
78                None,
79                "= NULL (reserved for an offset to a reordering table)",
80            ),
81            (
82                "uint16",
83                "ReqFeatureIndex",
84                None,
85                None,
86                "Index of a feature required for this language system- if no required features = 0xFFFF",
87            ),
88            (
89                "uint16",
90                "FeatureCount",
91                None,
92                None,
93                "Number of FeatureIndex values for this language system-excludes the required feature",
94            ),
95            (
96                "uint16",
97                "FeatureIndex",
98                "FeatureCount",
99                0,
100                "Array of indices into the FeatureList-in arbitrary order",
101            ),
102        ],
103    ),
104    (
105        "FeatureList",
106        [
107            (
108                "uint16",
109                "FeatureCount",
110                None,
111                None,
112                "Number of FeatureRecords in this table",
113            ),
114            (
115                "struct",
116                "FeatureRecord",
117                "FeatureCount",
118                0,
119                "Array of FeatureRecords-zero-based (first feature has FeatureIndex = 0)-listed alphabetically by FeatureTag",
120            ),
121        ],
122    ),
123    (
124        "FeatureRecord",
125        [
126            ("Tag", "FeatureTag", None, None, "4-byte feature identification tag"),
127            (
128                "Offset",
129                "Feature",
130                None,
131                None,
132                "Offset to Feature table-from beginning of FeatureList",
133            ),
134        ],
135    ),
136    (
137        "Feature",
138        [
139            (
140                "Offset",
141                "FeatureParams",
142                None,
143                None,
144                "= NULL (reserved for offset to FeatureParams)",
145            ),
146            (
147                "uint16",
148                "LookupCount",
149                None,
150                None,
151                "Number of LookupList indices for this feature",
152            ),
153            (
154                "uint16",
155                "LookupListIndex",
156                "LookupCount",
157                0,
158                "Array of LookupList indices for this feature -zero-based (first lookup is LookupListIndex = 0)",
159            ),
160        ],
161    ),
162    ("FeatureParams", []),
163    (
164        "FeatureParamsSize",
165        [
166            (
167                "DeciPoints",
168                "DesignSize",
169                None,
170                None,
171                "The design size in 720/inch units (decipoints).",
172            ),
173            (
174                "uint16",
175                "SubfamilyID",
176                None,
177                None,
178                "Serves as an identifier that associates fonts in a subfamily.",
179            ),
180            ("NameID", "SubfamilyNameID", None, None, "Subfamily NameID."),
181            (
182                "DeciPoints",
183                "RangeStart",
184                None,
185                None,
186                "Small end of recommended usage range (exclusive) in 720/inch units.",
187            ),
188            (
189                "DeciPoints",
190                "RangeEnd",
191                None,
192                None,
193                "Large end of recommended usage range (inclusive) in 720/inch units.",
194            ),
195        ],
196    ),
197    (
198        "FeatureParamsStylisticSet",
199        [
200            ("uint16", "Version", None, None, "Set to 0."),
201            ("NameID", "UINameID", None, None, "UI NameID."),
202        ],
203    ),
204    (
205        "FeatureParamsCharacterVariants",
206        [
207            ("uint16", "Format", None, None, "Set to 0."),
208            ("NameID", "FeatUILabelNameID", None, None, "Feature UI label NameID."),
209            (
210                "NameID",
211                "FeatUITooltipTextNameID",
212                None,
213                None,
214                "Feature UI tooltip text NameID.",
215            ),
216            ("NameID", "SampleTextNameID", None, None, "Sample text NameID."),
217            ("uint16", "NumNamedParameters", None, None, "Number of named parameters."),
218            (
219                "NameID",
220                "FirstParamUILabelNameID",
221                None,
222                None,
223                "First NameID of UI feature parameters.",
224            ),
225            (
226                "uint16",
227                "CharCount",
228                None,
229                None,
230                "Count of characters this feature provides glyph variants for.",
231            ),
232            (
233                "uint24",
234                "Character",
235                "CharCount",
236                0,
237                "Unicode characters for which this feature provides glyph variants.",
238            ),
239        ],
240    ),
241    (
242        "LookupList",
243        [
244            ("uint16", "LookupCount", None, None, "Number of lookups in this table"),
245            (
246                "Offset",
247                "Lookup",
248                "LookupCount",
249                0,
250                "Array of offsets to Lookup tables-from beginning of LookupList -zero based (first lookup is Lookup index = 0)",
251            ),
252        ],
253    ),
254    (
255        "Lookup",
256        [
257            (
258                "uint16",
259                "LookupType",
260                None,
261                None,
262                "Different enumerations for GSUB and GPOS",
263            ),
264            ("LookupFlag", "LookupFlag", None, None, "Lookup qualifiers"),
265            (
266                "uint16",
267                "SubTableCount",
268                None,
269                None,
270                "Number of SubTables for this lookup",
271            ),
272            (
273                "Offset",
274                "SubTable",
275                "SubTableCount",
276                0,
277                "Array of offsets to SubTables-from beginning of Lookup table",
278            ),
279            (
280                "uint16",
281                "MarkFilteringSet",
282                None,
283                "LookupFlag & 0x0010",
284                "If set, indicates that the lookup table structure is followed by a MarkFilteringSet field. The layout engine skips over all mark glyphs not in the mark filtering set indicated.",
285            ),
286        ],
287    ),
288    (
289        "CoverageFormat1",
290        [
291            ("uint16", "CoverageFormat", None, None, "Format identifier-format = 1"),
292            ("uint16", "GlyphCount", None, None, "Number of glyphs in the GlyphArray"),
293            (
294                "GlyphID",
295                "GlyphArray",
296                "GlyphCount",
297                0,
298                "Array of GlyphIDs-in numerical order",
299            ),
300        ],
301    ),
302    (
303        "CoverageFormat2",
304        [
305            ("uint16", "CoverageFormat", None, None, "Format identifier-format = 2"),
306            ("uint16", "RangeCount", None, None, "Number of RangeRecords"),
307            (
308                "struct",
309                "RangeRecord",
310                "RangeCount",
311                0,
312                "Array of glyph ranges-ordered by Start GlyphID",
313            ),
314        ],
315    ),
316    (
317        "RangeRecord",
318        [
319            ("GlyphID", "Start", None, None, "First GlyphID in the range"),
320            ("GlyphID", "End", None, None, "Last GlyphID in the range"),
321            (
322                "uint16",
323                "StartCoverageIndex",
324                None,
325                None,
326                "Coverage Index of first GlyphID in range",
327            ),
328        ],
329    ),
330    (
331        "ClassDefFormat1",
332        [
333            ("uint16", "ClassFormat", None, None, "Format identifier-format = 1"),
334            (
335                "GlyphID",
336                "StartGlyph",
337                None,
338                None,
339                "First GlyphID of the ClassValueArray",
340            ),
341            ("uint16", "GlyphCount", None, None, "Size of the ClassValueArray"),
342            (
343                "uint16",
344                "ClassValueArray",
345                "GlyphCount",
346                0,
347                "Array of Class Values-one per GlyphID",
348            ),
349        ],
350    ),
351    (
352        "ClassDefFormat2",
353        [
354            ("uint16", "ClassFormat", None, None, "Format identifier-format = 2"),
355            ("uint16", "ClassRangeCount", None, None, "Number of ClassRangeRecords"),
356            (
357                "struct",
358                "ClassRangeRecord",
359                "ClassRangeCount",
360                0,
361                "Array of ClassRangeRecords-ordered by Start GlyphID",
362            ),
363        ],
364    ),
365    (
366        "ClassRangeRecord",
367        [
368            ("GlyphID", "Start", None, None, "First GlyphID in the range"),
369            ("GlyphID", "End", None, None, "Last GlyphID in the range"),
370            ("uint16", "Class", None, None, "Applied to all glyphs in the range"),
371        ],
372    ),
373    (
374        "Device",
375        [
376            ("uint16", "StartSize", None, None, "Smallest size to correct-in ppem"),
377            ("uint16", "EndSize", None, None, "Largest size to correct-in ppem"),
378            (
379                "uint16",
380                "DeltaFormat",
381                None,
382                None,
383                "Format of DeltaValue array data: 1, 2, or 3",
384            ),
385            (
386                "DeltaValue",
387                "DeltaValue",
388                "",
389                "DeltaFormat in (1,2,3)",
390                "Array of compressed data",
391            ),
392        ],
393    ),
394    #
395    # gpos
396    #
397    (
398        "GPOS",
399        [
400            (
401                "Version",
402                "Version",
403                None,
404                None,
405                "Version of the GPOS table- 0x00010000 or 0x00010001",
406            ),
407            (
408                "Offset",
409                "ScriptList",
410                None,
411                None,
412                "Offset to ScriptList table-from beginning of GPOS table",
413            ),
414            (
415                "Offset",
416                "FeatureList",
417                None,
418                None,
419                "Offset to FeatureList table-from beginning of GPOS table",
420            ),
421            (
422                "Offset",
423                "LookupList",
424                None,
425                None,
426                "Offset to LookupList table-from beginning of GPOS table",
427            ),
428            (
429                "LOffset",
430                "FeatureVariations",
431                None,
432                "Version >= 0x00010001",
433                "Offset to FeatureVariations table-from beginning of GPOS table",
434            ),
435        ],
436    ),
437    (
438        "SinglePosFormat1",
439        [
440            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
441            (
442                "Offset",
443                "Coverage",
444                None,
445                None,
446                "Offset to Coverage table-from beginning of SinglePos subtable",
447            ),
448            (
449                "uint16",
450                "ValueFormat",
451                None,
452                None,
453                "Defines the types of data in the ValueRecord",
454            ),
455            (
456                "ValueRecord",
457                "Value",
458                None,
459                None,
460                "Defines positioning value(s)-applied to all glyphs in the Coverage table",
461            ),
462        ],
463    ),
464    (
465        "SinglePosFormat2",
466        [
467            ("uint16", "PosFormat", None, None, "Format identifier-format = 2"),
468            (
469                "Offset",
470                "Coverage",
471                None,
472                None,
473                "Offset to Coverage table-from beginning of SinglePos subtable",
474            ),
475            (
476                "uint16",
477                "ValueFormat",
478                None,
479                None,
480                "Defines the types of data in the ValueRecord",
481            ),
482            ("uint16", "ValueCount", None, None, "Number of ValueRecords"),
483            (
484                "ValueRecord",
485                "Value",
486                "ValueCount",
487                0,
488                "Array of ValueRecords-positioning values applied to glyphs",
489            ),
490        ],
491    ),
492    (
493        "PairPosFormat1",
494        [
495            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
496            (
497                "Offset",
498                "Coverage",
499                None,
500                None,
501                "Offset to Coverage table-from beginning of PairPos subtable-only the first glyph in each pair",
502            ),
503            (
504                "uint16",
505                "ValueFormat1",
506                None,
507                None,
508                "Defines the types of data in ValueRecord1-for the first glyph in the pair -may be zero (0)",
509            ),
510            (
511                "uint16",
512                "ValueFormat2",
513                None,
514                None,
515                "Defines the types of data in ValueRecord2-for the second glyph in the pair -may be zero (0)",
516            ),
517            ("uint16", "PairSetCount", None, None, "Number of PairSet tables"),
518            (
519                "Offset",
520                "PairSet",
521                "PairSetCount",
522                0,
523                "Array of offsets to PairSet tables-from beginning of PairPos subtable-ordered by Coverage Index",
524            ),
525        ],
526    ),
527    (
528        "PairSet",
529        [
530            ("uint16", "PairValueCount", None, None, "Number of PairValueRecords"),
531            (
532                "struct",
533                "PairValueRecord",
534                "PairValueCount",
535                0,
536                "Array of PairValueRecords-ordered by GlyphID of the second glyph",
537            ),
538        ],
539    ),
540    (
541        "PairValueRecord",
542        [
543            (
544                "GlyphID",
545                "SecondGlyph",
546                None,
547                None,
548                "GlyphID of second glyph in the pair-first glyph is listed in the Coverage table",
549            ),
550            (
551                "ValueRecord",
552                "Value1",
553                None,
554                None,
555                "Positioning data for the first glyph in the pair",
556            ),
557            (
558                "ValueRecord",
559                "Value2",
560                None,
561                None,
562                "Positioning data for the second glyph in the pair",
563            ),
564        ],
565    ),
566    (
567        "PairPosFormat2",
568        [
569            ("uint16", "PosFormat", None, None, "Format identifier-format = 2"),
570            (
571                "Offset",
572                "Coverage",
573                None,
574                None,
575                "Offset to Coverage table-from beginning of PairPos subtable-for the first glyph of the pair",
576            ),
577            (
578                "uint16",
579                "ValueFormat1",
580                None,
581                None,
582                "ValueRecord definition-for the first glyph of the pair-may be zero (0)",
583            ),
584            (
585                "uint16",
586                "ValueFormat2",
587                None,
588                None,
589                "ValueRecord definition-for the second glyph of the pair-may be zero (0)",
590            ),
591            (
592                "Offset",
593                "ClassDef1",
594                None,
595                None,
596                "Offset to ClassDef table-from beginning of PairPos subtable-for the first glyph of the pair",
597            ),
598            (
599                "Offset",
600                "ClassDef2",
601                None,
602                None,
603                "Offset to ClassDef table-from beginning of PairPos subtable-for the second glyph of the pair",
604            ),
605            (
606                "uint16",
607                "Class1Count",
608                None,
609                None,
610                "Number of classes in ClassDef1 table-includes Class0",
611            ),
612            (
613                "uint16",
614                "Class2Count",
615                None,
616                None,
617                "Number of classes in ClassDef2 table-includes Class0",
618            ),
619            (
620                "struct",
621                "Class1Record",
622                "Class1Count",
623                0,
624                "Array of Class1 records-ordered by Class1",
625            ),
626        ],
627    ),
628    (
629        "Class1Record",
630        [
631            (
632                "struct",
633                "Class2Record",
634                "Class2Count",
635                0,
636                "Array of Class2 records-ordered by Class2",
637            ),
638        ],
639    ),
640    (
641        "Class2Record",
642        [
643            (
644                "ValueRecord",
645                "Value1",
646                None,
647                None,
648                "Positioning for first glyph-empty if ValueFormat1 = 0",
649            ),
650            (
651                "ValueRecord",
652                "Value2",
653                None,
654                None,
655                "Positioning for second glyph-empty if ValueFormat2 = 0",
656            ),
657        ],
658    ),
659    (
660        "CursivePosFormat1",
661        [
662            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
663            (
664                "Offset",
665                "Coverage",
666                None,
667                None,
668                "Offset to Coverage table-from beginning of CursivePos subtable",
669            ),
670            ("uint16", "EntryExitCount", None, None, "Number of EntryExit records"),
671            (
672                "struct",
673                "EntryExitRecord",
674                "EntryExitCount",
675                0,
676                "Array of EntryExit records-in Coverage Index order",
677            ),
678        ],
679    ),
680    (
681        "EntryExitRecord",
682        [
683            (
684                "Offset",
685                "EntryAnchor",
686                None,
687                None,
688                "Offset to EntryAnchor table-from beginning of CursivePos subtable-may be NULL",
689            ),
690            (
691                "Offset",
692                "ExitAnchor",
693                None,
694                None,
695                "Offset to ExitAnchor table-from beginning of CursivePos subtable-may be NULL",
696            ),
697        ],
698    ),
699    (
700        "MarkBasePosFormat1",
701        [
702            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
703            (
704                "Offset",
705                "MarkCoverage",
706                None,
707                None,
708                "Offset to MarkCoverage table-from beginning of MarkBasePos subtable",
709            ),
710            (
711                "Offset",
712                "BaseCoverage",
713                None,
714                None,
715                "Offset to BaseCoverage table-from beginning of MarkBasePos subtable",
716            ),
717            ("uint16", "ClassCount", None, None, "Number of classes defined for marks"),
718            (
719                "Offset",
720                "MarkArray",
721                None,
722                None,
723                "Offset to MarkArray table-from beginning of MarkBasePos subtable",
724            ),
725            (
726                "Offset",
727                "BaseArray",
728                None,
729                None,
730                "Offset to BaseArray table-from beginning of MarkBasePos subtable",
731            ),
732        ],
733    ),
734    (
735        "BaseArray",
736        [
737            ("uint16", "BaseCount", None, None, "Number of BaseRecords"),
738            (
739                "struct",
740                "BaseRecord",
741                "BaseCount",
742                0,
743                "Array of BaseRecords-in order of BaseCoverage Index",
744            ),
745        ],
746    ),
747    (
748        "BaseRecord",
749        [
750            (
751                "Offset",
752                "BaseAnchor",
753                "ClassCount",
754                0,
755                "Array of offsets (one per class) to Anchor tables-from beginning of BaseArray table-ordered by class-zero-based",
756            ),
757        ],
758    ),
759    (
760        "MarkLigPosFormat1",
761        [
762            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
763            (
764                "Offset",
765                "MarkCoverage",
766                None,
767                None,
768                "Offset to Mark Coverage table-from beginning of MarkLigPos subtable",
769            ),
770            (
771                "Offset",
772                "LigatureCoverage",
773                None,
774                None,
775                "Offset to Ligature Coverage table-from beginning of MarkLigPos subtable",
776            ),
777            ("uint16", "ClassCount", None, None, "Number of defined mark classes"),
778            (
779                "Offset",
780                "MarkArray",
781                None,
782                None,
783                "Offset to MarkArray table-from beginning of MarkLigPos subtable",
784            ),
785            (
786                "Offset",
787                "LigatureArray",
788                None,
789                None,
790                "Offset to LigatureArray table-from beginning of MarkLigPos subtable",
791            ),
792        ],
793    ),
794    (
795        "LigatureArray",
796        [
797            (
798                "uint16",
799                "LigatureCount",
800                None,
801                None,
802                "Number of LigatureAttach table offsets",
803            ),
804            (
805                "Offset",
806                "LigatureAttach",
807                "LigatureCount",
808                0,
809                "Array of offsets to LigatureAttach tables-from beginning of LigatureArray table-ordered by LigatureCoverage Index",
810            ),
811        ],
812    ),
813    (
814        "LigatureAttach",
815        [
816            (
817                "uint16",
818                "ComponentCount",
819                None,
820                None,
821                "Number of ComponentRecords in this ligature",
822            ),
823            (
824                "struct",
825                "ComponentRecord",
826                "ComponentCount",
827                0,
828                "Array of Component records-ordered in writing direction",
829            ),
830        ],
831    ),
832    (
833        "ComponentRecord",
834        [
835            (
836                "Offset",
837                "LigatureAnchor",
838                "ClassCount",
839                0,
840                "Array of offsets (one per class) to Anchor tables-from beginning of LigatureAttach table-ordered by class-NULL if a component does not have an attachment for a class-zero-based array",
841            ),
842        ],
843    ),
844    (
845        "MarkMarkPosFormat1",
846        [
847            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
848            (
849                "Offset",
850                "Mark1Coverage",
851                None,
852                None,
853                "Offset to Combining Mark Coverage table-from beginning of MarkMarkPos subtable",
854            ),
855            (
856                "Offset",
857                "Mark2Coverage",
858                None,
859                None,
860                "Offset to Base Mark Coverage table-from beginning of MarkMarkPos subtable",
861            ),
862            (
863                "uint16",
864                "ClassCount",
865                None,
866                None,
867                "Number of Combining Mark classes defined",
868            ),
869            (
870                "Offset",
871                "Mark1Array",
872                None,
873                None,
874                "Offset to MarkArray table for Mark1-from beginning of MarkMarkPos subtable",
875            ),
876            (
877                "Offset",
878                "Mark2Array",
879                None,
880                None,
881                "Offset to Mark2Array table for Mark2-from beginning of MarkMarkPos subtable",
882            ),
883        ],
884    ),
885    (
886        "Mark2Array",
887        [
888            ("uint16", "Mark2Count", None, None, "Number of Mark2 records"),
889            (
890                "struct",
891                "Mark2Record",
892                "Mark2Count",
893                0,
894                "Array of Mark2 records-in Coverage order",
895            ),
896        ],
897    ),
898    (
899        "Mark2Record",
900        [
901            (
902                "Offset",
903                "Mark2Anchor",
904                "ClassCount",
905                0,
906                "Array of offsets (one per class) to Anchor tables-from beginning of Mark2Array table-zero-based array",
907            ),
908        ],
909    ),
910    (
911        "PosLookupRecord",
912        [
913            (
914                "uint16",
915                "SequenceIndex",
916                None,
917                None,
918                "Index to input glyph sequence-first glyph = 0",
919            ),
920            (
921                "uint16",
922                "LookupListIndex",
923                None,
924                None,
925                "Lookup to apply to that position-zero-based",
926            ),
927        ],
928    ),
929    (
930        "ContextPosFormat1",
931        [
932            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
933            (
934                "Offset",
935                "Coverage",
936                None,
937                None,
938                "Offset to Coverage table-from beginning of ContextPos subtable",
939            ),
940            ("uint16", "PosRuleSetCount", None, None, "Number of PosRuleSet tables"),
941            (
942                "Offset",
943                "PosRuleSet",
944                "PosRuleSetCount",
945                0,
946                "Array of offsets to PosRuleSet tables-from beginning of ContextPos subtable-ordered by Coverage Index",
947            ),
948        ],
949    ),
950    (
951        "PosRuleSet",
952        [
953            ("uint16", "PosRuleCount", None, None, "Number of PosRule tables"),
954            (
955                "Offset",
956                "PosRule",
957                "PosRuleCount",
958                0,
959                "Array of offsets to PosRule tables-from beginning of PosRuleSet-ordered by preference",
960            ),
961        ],
962    ),
963    (
964        "PosRule",
965        [
966            (
967                "uint16",
968                "GlyphCount",
969                None,
970                None,
971                "Number of glyphs in the Input glyph sequence",
972            ),
973            ("uint16", "PosCount", None, None, "Number of PosLookupRecords"),
974            (
975                "GlyphID",
976                "Input",
977                "GlyphCount",
978                -1,
979                "Array of input GlyphIDs-starting with the second glyph",
980            ),
981            (
982                "struct",
983                "PosLookupRecord",
984                "PosCount",
985                0,
986                "Array of positioning lookups-in design order",
987            ),
988        ],
989    ),
990    (
991        "ContextPosFormat2",
992        [
993            ("uint16", "PosFormat", None, None, "Format identifier-format = 2"),
994            (
995                "Offset",
996                "Coverage",
997                None,
998                None,
999                "Offset to Coverage table-from beginning of ContextPos subtable",
1000            ),
1001            (
1002                "Offset",
1003                "ClassDef",
1004                None,
1005                None,
1006                "Offset to ClassDef table-from beginning of ContextPos subtable",
1007            ),
1008            ("uint16", "PosClassSetCount", None, None, "Number of PosClassSet tables"),
1009            (
1010                "Offset",
1011                "PosClassSet",
1012                "PosClassSetCount",
1013                0,
1014                "Array of offsets to PosClassSet tables-from beginning of ContextPos subtable-ordered by class-may be NULL",
1015            ),
1016        ],
1017    ),
1018    (
1019        "PosClassSet",
1020        [
1021            (
1022                "uint16",
1023                "PosClassRuleCount",
1024                None,
1025                None,
1026                "Number of PosClassRule tables",
1027            ),
1028            (
1029                "Offset",
1030                "PosClassRule",
1031                "PosClassRuleCount",
1032                0,
1033                "Array of offsets to PosClassRule tables-from beginning of PosClassSet-ordered by preference",
1034            ),
1035        ],
1036    ),
1037    (
1038        "PosClassRule",
1039        [
1040            ("uint16", "GlyphCount", None, None, "Number of glyphs to be matched"),
1041            ("uint16", "PosCount", None, None, "Number of PosLookupRecords"),
1042            (
1043                "uint16",
1044                "Class",
1045                "GlyphCount",
1046                -1,
1047                "Array of classes-beginning with the second class-to be matched to the input glyph sequence",
1048            ),
1049            (
1050                "struct",
1051                "PosLookupRecord",
1052                "PosCount",
1053                0,
1054                "Array of positioning lookups-in design order",
1055            ),
1056        ],
1057    ),
1058    (
1059        "ContextPosFormat3",
1060        [
1061            ("uint16", "PosFormat", None, None, "Format identifier-format = 3"),
1062            (
1063                "uint16",
1064                "GlyphCount",
1065                None,
1066                None,
1067                "Number of glyphs in the input sequence",
1068            ),
1069            ("uint16", "PosCount", None, None, "Number of PosLookupRecords"),
1070            (
1071                "Offset",
1072                "Coverage",
1073                "GlyphCount",
1074                0,
1075                "Array of offsets to Coverage tables-from beginning of ContextPos subtable",
1076            ),
1077            (
1078                "struct",
1079                "PosLookupRecord",
1080                "PosCount",
1081                0,
1082                "Array of positioning lookups-in design order",
1083            ),
1084        ],
1085    ),
1086    (
1087        "ChainContextPosFormat1",
1088        [
1089            ("uint16", "PosFormat", None, None, "Format identifier-format = 1"),
1090            (
1091                "Offset",
1092                "Coverage",
1093                None,
1094                None,
1095                "Offset to Coverage table-from beginning of ContextPos subtable",
1096            ),
1097            (
1098                "uint16",
1099                "ChainPosRuleSetCount",
1100                None,
1101                None,
1102                "Number of ChainPosRuleSet tables",
1103            ),
1104            (
1105                "Offset",
1106                "ChainPosRuleSet",
1107                "ChainPosRuleSetCount",
1108                0,
1109                "Array of offsets to ChainPosRuleSet tables-from beginning of ContextPos subtable-ordered by Coverage Index",
1110            ),
1111        ],
1112    ),
1113    (
1114        "ChainPosRuleSet",
1115        [
1116            (
1117                "uint16",
1118                "ChainPosRuleCount",
1119                None,
1120                None,
1121                "Number of ChainPosRule tables",
1122            ),
1123            (
1124                "Offset",
1125                "ChainPosRule",
1126                "ChainPosRuleCount",
1127                0,
1128                "Array of offsets to ChainPosRule tables-from beginning of ChainPosRuleSet-ordered by preference",
1129            ),
1130        ],
1131    ),
1132    (
1133        "ChainPosRule",
1134        [
1135            (
1136                "uint16",
1137                "BacktrackGlyphCount",
1138                None,
1139                None,
1140                "Total number of glyphs in the backtrack sequence (number of glyphs to be matched before the first glyph)",
1141            ),
1142            (
1143                "GlyphID",
1144                "Backtrack",
1145                "BacktrackGlyphCount",
1146                0,
1147                "Array of backtracking GlyphID's (to be matched before the input sequence)",
1148            ),
1149            (
1150                "uint16",
1151                "InputGlyphCount",
1152                None,
1153                None,
1154                "Total number of glyphs in the input sequence (includes the first glyph)",
1155            ),
1156            (
1157                "GlyphID",
1158                "Input",
1159                "InputGlyphCount",
1160                -1,
1161                "Array of input GlyphIDs (start with second glyph)",
1162            ),
1163            (
1164                "uint16",
1165                "LookAheadGlyphCount",
1166                None,
1167                None,
1168                "Total number of glyphs in the look ahead sequence (number of glyphs to be matched after the input sequence)",
1169            ),
1170            (
1171                "GlyphID",
1172                "LookAhead",
1173                "LookAheadGlyphCount",
1174                0,
1175                "Array of lookahead GlyphID's (to be matched after the input sequence)",
1176            ),
1177            ("uint16", "PosCount", None, None, "Number of PosLookupRecords"),
1178            (
1179                "struct",
1180                "PosLookupRecord",
1181                "PosCount",
1182                0,
1183                "Array of PosLookupRecords (in design order)",
1184            ),
1185        ],
1186    ),
1187    (
1188        "ChainContextPosFormat2",
1189        [
1190            ("uint16", "PosFormat", None, None, "Format identifier-format = 2"),
1191            (
1192                "Offset",
1193                "Coverage",
1194                None,
1195                None,
1196                "Offset to Coverage table-from beginning of ChainContextPos subtable",
1197            ),
1198            (
1199                "Offset",
1200                "BacktrackClassDef",
1201                None,
1202                None,
1203                "Offset to ClassDef table containing backtrack sequence context-from beginning of ChainContextPos subtable",
1204            ),
1205            (
1206                "Offset",
1207                "InputClassDef",
1208                None,
1209                None,
1210                "Offset to ClassDef table containing input sequence context-from beginning of ChainContextPos subtable",
1211            ),
1212            (
1213                "Offset",
1214                "LookAheadClassDef",
1215                None,
1216                None,
1217                "Offset to ClassDef table containing lookahead sequence context-from beginning of ChainContextPos subtable",
1218            ),
1219            (
1220                "uint16",
1221                "ChainPosClassSetCount",
1222                None,
1223                None,
1224                "Number of ChainPosClassSet tables",
1225            ),
1226            (
1227                "Offset",
1228                "ChainPosClassSet",
1229                "ChainPosClassSetCount",
1230                0,
1231                "Array of offsets to ChainPosClassSet tables-from beginning of ChainContextPos subtable-ordered by input class-may be NULL",
1232            ),
1233        ],
1234    ),
1235    (
1236        "ChainPosClassSet",
1237        [
1238            (
1239                "uint16",
1240                "ChainPosClassRuleCount",
1241                None,
1242                None,
1243                "Number of ChainPosClassRule tables",
1244            ),
1245            (
1246                "Offset",
1247                "ChainPosClassRule",
1248                "ChainPosClassRuleCount",
1249                0,
1250                "Array of offsets to ChainPosClassRule tables-from beginning of ChainPosClassSet-ordered by preference",
1251            ),
1252        ],
1253    ),
1254    (
1255        "ChainPosClassRule",
1256        [
1257            (
1258                "uint16",
1259                "BacktrackGlyphCount",
1260                None,
1261                None,
1262                "Total number of glyphs in the backtrack sequence (number of glyphs to be matched before the first glyph)",
1263            ),
1264            (
1265                "uint16",
1266                "Backtrack",
1267                "BacktrackGlyphCount",
1268                0,
1269                "Array of backtracking classes(to be matched before the input sequence)",
1270            ),
1271            (
1272                "uint16",
1273                "InputGlyphCount",
1274                None,
1275                None,
1276                "Total number of classes in the input sequence (includes the first class)",
1277            ),
1278            (
1279                "uint16",
1280                "Input",
1281                "InputGlyphCount",
1282                -1,
1283                "Array of input classes(start with second class; to be matched with the input glyph sequence)",
1284            ),
1285            (
1286                "uint16",
1287                "LookAheadGlyphCount",
1288                None,
1289                None,
1290                "Total number of classes in the look ahead sequence (number of classes to be matched after the input sequence)",
1291            ),
1292            (
1293                "uint16",
1294                "LookAhead",
1295                "LookAheadGlyphCount",
1296                0,
1297                "Array of lookahead classes(to be matched after the input sequence)",
1298            ),
1299            ("uint16", "PosCount", None, None, "Number of PosLookupRecords"),
1300            (
1301                "struct",
1302                "PosLookupRecord",
1303                "PosCount",
1304                0,
1305                "Array of PosLookupRecords (in design order)",
1306            ),
1307        ],
1308    ),
1309    (
1310        "ChainContextPosFormat3",
1311        [
1312            ("uint16", "PosFormat", None, None, "Format identifier-format = 3"),
1313            (
1314                "uint16",
1315                "BacktrackGlyphCount",
1316                None,
1317                None,
1318                "Number of glyphs in the backtracking sequence",
1319            ),
1320            (
1321                "Offset",
1322                "BacktrackCoverage",
1323                "BacktrackGlyphCount",
1324                0,
1325                "Array of offsets to coverage tables in backtracking sequence, in glyph sequence order",
1326            ),
1327            (
1328                "uint16",
1329                "InputGlyphCount",
1330                None,
1331                None,
1332                "Number of glyphs in input sequence",
1333            ),
1334            (
1335                "Offset",
1336                "InputCoverage",
1337                "InputGlyphCount",
1338                0,
1339                "Array of offsets to coverage tables in input sequence, in glyph sequence order",
1340            ),
1341            (
1342                "uint16",
1343                "LookAheadGlyphCount",
1344                None,
1345                None,
1346                "Number of glyphs in lookahead sequence",
1347            ),
1348            (
1349                "Offset",
1350                "LookAheadCoverage",
1351                "LookAheadGlyphCount",
1352                0,
1353                "Array of offsets to coverage tables in lookahead sequence, in glyph sequence order",
1354            ),
1355            ("uint16", "PosCount", None, None, "Number of PosLookupRecords"),
1356            (
1357                "struct",
1358                "PosLookupRecord",
1359                "PosCount",
1360                0,
1361                "Array of PosLookupRecords,in design order",
1362            ),
1363        ],
1364    ),
1365    (
1366        "ExtensionPosFormat1",
1367        [
1368            ("uint16", "ExtFormat", None, None, "Format identifier. Set to 1."),
1369            (
1370                "uint16",
1371                "ExtensionLookupType",
1372                None,
1373                None,
1374                "Lookup type of subtable referenced by ExtensionOffset (i.e. the extension subtable).",
1375            ),
1376            ("LOffset", "ExtSubTable", None, None, "Offset to SubTable"),
1377        ],
1378    ),
1379    # 	('ValueRecord', [
1380    # 		('int16', 'XPlacement', None, None, 'Horizontal adjustment for placement-in design units'),
1381    # 		('int16', 'YPlacement', None, None, 'Vertical adjustment for placement-in design units'),
1382    # 		('int16', 'XAdvance', None, None, 'Horizontal adjustment for advance-in design units (only used for horizontal writing)'),
1383    # 		('int16', 'YAdvance', None, None, 'Vertical adjustment for advance-in design units (only used for vertical writing)'),
1384    # 		('Offset', 'XPlaDevice', None, None, 'Offset to Device table for horizontal placement-measured from beginning of PosTable (may be NULL)'),
1385    # 		('Offset', 'YPlaDevice', None, None, 'Offset to Device table for vertical placement-measured from beginning of PosTable (may be NULL)'),
1386    # 		('Offset', 'XAdvDevice', None, None, 'Offset to Device table for horizontal advance-measured from beginning of PosTable (may be NULL)'),
1387    # 		('Offset', 'YAdvDevice', None, None, 'Offset to Device table for vertical advance-measured from beginning of PosTable (may be NULL)'),
1388    # 	]),
1389    (
1390        "AnchorFormat1",
1391        [
1392            ("uint16", "AnchorFormat", None, None, "Format identifier-format = 1"),
1393            ("int16", "XCoordinate", None, None, "Horizontal value-in design units"),
1394            ("int16", "YCoordinate", None, None, "Vertical value-in design units"),
1395        ],
1396    ),
1397    (
1398        "AnchorFormat2",
1399        [
1400            ("uint16", "AnchorFormat", None, None, "Format identifier-format = 2"),
1401            ("int16", "XCoordinate", None, None, "Horizontal value-in design units"),
1402            ("int16", "YCoordinate", None, None, "Vertical value-in design units"),
1403            ("uint16", "AnchorPoint", None, None, "Index to glyph contour point"),
1404        ],
1405    ),
1406    (
1407        "AnchorFormat3",
1408        [
1409            ("uint16", "AnchorFormat", None, None, "Format identifier-format = 3"),
1410            ("int16", "XCoordinate", None, None, "Horizontal value-in design units"),
1411            ("int16", "YCoordinate", None, None, "Vertical value-in design units"),
1412            (
1413                "Offset",
1414                "XDeviceTable",
1415                None,
1416                None,
1417                "Offset to Device table for X coordinate- from beginning of Anchor table (may be NULL)",
1418            ),
1419            (
1420                "Offset",
1421                "YDeviceTable",
1422                None,
1423                None,
1424                "Offset to Device table for Y coordinate- from beginning of Anchor table (may be NULL)",
1425            ),
1426        ],
1427    ),
1428    (
1429        "MarkArray",
1430        [
1431            ("uint16", "MarkCount", None, None, "Number of MarkRecords"),
1432            (
1433                "struct",
1434                "MarkRecord",
1435                "MarkCount",
1436                0,
1437                "Array of MarkRecords-in Coverage order",
1438            ),
1439        ],
1440    ),
1441    (
1442        "MarkRecord",
1443        [
1444            ("uint16", "Class", None, None, "Class defined for this mark"),
1445            (
1446                "Offset",
1447                "MarkAnchor",
1448                None,
1449                None,
1450                "Offset to Anchor table-from beginning of MarkArray table",
1451            ),
1452        ],
1453    ),
1454    #
1455    # gsub
1456    #
1457    (
1458        "GSUB",
1459        [
1460            (
1461                "Version",
1462                "Version",
1463                None,
1464                None,
1465                "Version of the GSUB table- 0x00010000 or 0x00010001",
1466            ),
1467            (
1468                "Offset",
1469                "ScriptList",
1470                None,
1471                None,
1472                "Offset to ScriptList table-from beginning of GSUB table",
1473            ),
1474            (
1475                "Offset",
1476                "FeatureList",
1477                None,
1478                None,
1479                "Offset to FeatureList table-from beginning of GSUB table",
1480            ),
1481            (
1482                "Offset",
1483                "LookupList",
1484                None,
1485                None,
1486                "Offset to LookupList table-from beginning of GSUB table",
1487            ),
1488            (
1489                "LOffset",
1490                "FeatureVariations",
1491                None,
1492                "Version >= 0x00010001",
1493                "Offset to FeatureVariations table-from beginning of GSUB table",
1494            ),
1495        ],
1496    ),
1497    (
1498        "SingleSubstFormat1",
1499        [
1500            ("uint16", "SubstFormat", None, None, "Format identifier-format = 1"),
1501            (
1502                "Offset",
1503                "Coverage",
1504                None,
1505                None,
1506                "Offset to Coverage table-from beginning of Substitution table",
1507            ),
1508            (
1509                "uint16",
1510                "DeltaGlyphID",
1511                None,
1512                None,
1513                "Add to original GlyphID modulo 65536 to get substitute GlyphID",
1514            ),
1515        ],
1516    ),
1517    (
1518        "SingleSubstFormat2",
1519        [
1520            ("uint16", "SubstFormat", None, None, "Format identifier-format = 2"),
1521            (
1522                "Offset",
1523                "Coverage",
1524                None,
1525                None,
1526                "Offset to Coverage table-from beginning of Substitution table",
1527            ),
1528            (
1529                "uint16",
1530                "GlyphCount",
1531                None,
1532                None,
1533                "Number of GlyphIDs in the Substitute array",
1534            ),
1535            (
1536                "GlyphID",
1537                "Substitute",
1538                "GlyphCount",
1539                0,
1540                "Array of substitute GlyphIDs-ordered by Coverage Index",
1541            ),
1542        ],
1543    ),
1544    (
1545        "MultipleSubstFormat1",
1546        [
1547            ("uint16", "SubstFormat", None, None, "Format identifier-format = 1"),
1548            (
1549                "Offset",
1550                "Coverage",
1551                None,
1552                None,
1553                "Offset to Coverage table-from beginning of Substitution table",
1554            ),
1555            (
1556                "uint16",
1557                "SequenceCount",
1558                None,
1559                None,
1560                "Number of Sequence table offsets in the Sequence array",
1561            ),
1562            (
1563                "Offset",
1564                "Sequence",
1565                "SequenceCount",
1566                0,
1567                "Array of offsets to Sequence tables-from beginning of Substitution table-ordered by Coverage Index",
1568            ),
1569        ],
1570    ),
1571    (
1572        "Sequence",
1573        [
1574            (
1575                "uint16",
1576                "GlyphCount",
1577                None,
1578                None,
1579                "Number of GlyphIDs in the Substitute array. This should always be greater than 0.",
1580            ),
1581            (
1582                "GlyphID",
1583                "Substitute",
1584                "GlyphCount",
1585                0,
1586                "String of GlyphIDs to substitute",
1587            ),
1588        ],
1589    ),
1590    (
1591        "AlternateSubstFormat1",
1592        [
1593            ("uint16", "SubstFormat", None, None, "Format identifier-format = 1"),
1594            (
1595                "Offset",
1596                "Coverage",
1597                None,
1598                None,
1599                "Offset to Coverage table-from beginning of Substitution table",
1600            ),
1601            (
1602                "uint16",
1603                "AlternateSetCount",
1604                None,
1605                None,
1606                "Number of AlternateSet tables",
1607            ),
1608            (
1609                "Offset",
1610                "AlternateSet",
1611                "AlternateSetCount",
1612                0,
1613                "Array of offsets to AlternateSet tables-from beginning of Substitution table-ordered by Coverage Index",
1614            ),
1615        ],
1616    ),
1617    (
1618        "AlternateSet",
1619        [
1620            (
1621                "uint16",
1622                "GlyphCount",
1623                None,
1624                None,
1625                "Number of GlyphIDs in the Alternate array",
1626            ),
1627            (
1628                "GlyphID",
1629                "Alternate",
1630                "GlyphCount",
1631                0,
1632                "Array of alternate GlyphIDs-in arbitrary order",
1633            ),
1634        ],
1635    ),
1636    (
1637        "LigatureSubstFormat1",
1638        [
1639            ("uint16", "SubstFormat", None, None, "Format identifier-format = 1"),
1640            (
1641                "Offset",
1642                "Coverage",
1643                None,
1644                None,
1645                "Offset to Coverage table-from beginning of Substitution table",
1646            ),
1647            ("uint16", "LigSetCount", None, None, "Number of LigatureSet tables"),
1648            (
1649                "Offset",
1650                "LigatureSet",
1651                "LigSetCount",
1652                0,
1653                "Array of offsets to LigatureSet tables-from beginning of Substitution table-ordered by Coverage Index",
1654            ),
1655        ],
1656    ),
1657    (
1658        "LigatureSet",
1659        [
1660            ("uint16", "LigatureCount", None, None, "Number of Ligature tables"),
1661            (
1662                "Offset",
1663                "Ligature",
1664                "LigatureCount",
1665                0,
1666                "Array of offsets to Ligature tables-from beginning of LigatureSet table-ordered by preference",
1667            ),
1668        ],
1669    ),
1670    (
1671        "Ligature",
1672        [
1673            ("GlyphID", "LigGlyph", None, None, "GlyphID of ligature to substitute"),
1674            ("uint16", "CompCount", None, None, "Number of components in the ligature"),
1675            (
1676                "GlyphID",
1677                "Component",
1678                "CompCount",
1679                -1,
1680                "Array of component GlyphIDs-start with the second component-ordered in writing direction",
1681            ),
1682        ],
1683    ),
1684    (
1685        "SubstLookupRecord",
1686        [
1687            (
1688                "uint16",
1689                "SequenceIndex",
1690                None,
1691                None,
1692                "Index into current glyph sequence-first glyph = 0",
1693            ),
1694            (
1695                "uint16",
1696                "LookupListIndex",
1697                None,
1698                None,
1699                "Lookup to apply to that position-zero-based",
1700            ),
1701        ],
1702    ),
1703    (
1704        "ContextSubstFormat1",
1705        [
1706            ("uint16", "SubstFormat", None, None, "Format identifier-format = 1"),
1707            (
1708                "Offset",
1709                "Coverage",
1710                None,
1711                None,
1712                "Offset to Coverage table-from beginning of Substitution table",
1713            ),
1714            (
1715                "uint16",
1716                "SubRuleSetCount",
1717                None,
1718                None,
1719                "Number of SubRuleSet tables-must equal GlyphCount in Coverage table",
1720            ),
1721            (
1722                "Offset",
1723                "SubRuleSet",
1724                "SubRuleSetCount",
1725                0,
1726                "Array of offsets to SubRuleSet tables-from beginning of Substitution table-ordered by Coverage Index",
1727            ),
1728        ],
1729    ),
1730    (
1731        "SubRuleSet",
1732        [
1733            ("uint16", "SubRuleCount", None, None, "Number of SubRule tables"),
1734            (
1735                "Offset",
1736                "SubRule",
1737                "SubRuleCount",
1738                0,
1739                "Array of offsets to SubRule tables-from beginning of SubRuleSet table-ordered by preference",
1740            ),
1741        ],
1742    ),
1743    (
1744        "SubRule",
1745        [
1746            (
1747                "uint16",
1748                "GlyphCount",
1749                None,
1750                None,
1751                "Total number of glyphs in input glyph sequence-includes the first glyph",
1752            ),
1753            ("uint16", "SubstCount", None, None, "Number of SubstLookupRecords"),
1754            (
1755                "GlyphID",
1756                "Input",
1757                "GlyphCount",
1758                -1,
1759                "Array of input GlyphIDs-start with second glyph",
1760            ),
1761            (
1762                "struct",
1763                "SubstLookupRecord",
1764                "SubstCount",
1765                0,
1766                "Array of SubstLookupRecords-in design order",
1767            ),
1768        ],
1769    ),
1770    (
1771        "ContextSubstFormat2",
1772        [
1773            ("uint16", "SubstFormat", None, None, "Format identifier-format = 2"),
1774            (
1775                "Offset",
1776                "Coverage",
1777                None,
1778                None,
1779                "Offset to Coverage table-from beginning of Substitution table",
1780            ),
1781            (
1782                "Offset",
1783                "ClassDef",
1784                None,
1785                None,
1786                "Offset to glyph ClassDef table-from beginning of Substitution table",
1787            ),
1788            ("uint16", "SubClassSetCount", None, None, "Number of SubClassSet tables"),
1789            (
1790                "Offset",
1791                "SubClassSet",
1792                "SubClassSetCount",
1793                0,
1794                "Array of offsets to SubClassSet tables-from beginning of Substitution table-ordered by class-may be NULL",
1795            ),
1796        ],
1797    ),
1798    (
1799        "SubClassSet",
1800        [
1801            (
1802                "uint16",
1803                "SubClassRuleCount",
1804                None,
1805                None,
1806                "Number of SubClassRule tables",
1807            ),
1808            (
1809                "Offset",
1810                "SubClassRule",
1811                "SubClassRuleCount",
1812                0,
1813                "Array of offsets to SubClassRule tables-from beginning of SubClassSet-ordered by preference",
1814            ),
1815        ],
1816    ),
1817    (
1818        "SubClassRule",
1819        [
1820            (
1821                "uint16",
1822                "GlyphCount",
1823                None,
1824                None,
1825                "Total number of classes specified for the context in the rule-includes the first class",
1826            ),
1827            ("uint16", "SubstCount", None, None, "Number of SubstLookupRecords"),
1828            (
1829                "uint16",
1830                "Class",
1831                "GlyphCount",
1832                -1,
1833                "Array of classes-beginning with the second class-to be matched to the input glyph class sequence",
1834            ),
1835            (
1836                "struct",
1837                "SubstLookupRecord",
1838                "SubstCount",
1839                0,
1840                "Array of Substitution lookups-in design order",
1841            ),
1842        ],
1843    ),
1844    (
1845        "ContextSubstFormat3",
1846        [
1847            ("uint16", "SubstFormat", None, None, "Format identifier-format = 3"),
1848            (
1849                "uint16",
1850                "GlyphCount",
1851                None,
1852                None,
1853                "Number of glyphs in the input glyph sequence",
1854            ),
1855            ("uint16", "SubstCount", None, None, "Number of SubstLookupRecords"),
1856            (
1857                "Offset",
1858                "Coverage",
1859                "GlyphCount",
1860                0,
1861                "Array of offsets to Coverage table-from beginning of Substitution table-in glyph sequence order",
1862            ),
1863            (
1864                "struct",
1865                "SubstLookupRecord",
1866                "SubstCount",
1867                0,
1868                "Array of SubstLookupRecords-in design order",
1869            ),
1870        ],
1871    ),
1872    (
1873        "ChainContextSubstFormat1",
1874        [
1875            ("uint16", "SubstFormat", None, None, "Format identifier-format = 1"),
1876            (
1877                "Offset",
1878                "Coverage",
1879                None,
1880                None,
1881                "Offset to Coverage table-from beginning of Substitution table",
1882            ),
1883            (
1884                "uint16",
1885                "ChainSubRuleSetCount",
1886                None,
1887                None,
1888                "Number of ChainSubRuleSet tables-must equal GlyphCount in Coverage table",
1889            ),
1890            (
1891                "Offset",
1892                "ChainSubRuleSet",
1893                "ChainSubRuleSetCount",
1894                0,
1895                "Array of offsets to ChainSubRuleSet tables-from beginning of Substitution table-ordered by Coverage Index",
1896            ),
1897        ],
1898    ),
1899    (
1900        "ChainSubRuleSet",
1901        [
1902            (
1903                "uint16",
1904                "ChainSubRuleCount",
1905                None,
1906                None,
1907                "Number of ChainSubRule tables",
1908            ),
1909            (
1910                "Offset",
1911                "ChainSubRule",
1912                "ChainSubRuleCount",
1913                0,
1914                "Array of offsets to ChainSubRule tables-from beginning of ChainSubRuleSet table-ordered by preference",
1915            ),
1916        ],
1917    ),
1918    (
1919        "ChainSubRule",
1920        [
1921            (
1922                "uint16",
1923                "BacktrackGlyphCount",
1924                None,
1925                None,
1926                "Total number of glyphs in the backtrack sequence (number of glyphs to be matched before the first glyph)",
1927            ),
1928            (
1929                "GlyphID",
1930                "Backtrack",
1931                "BacktrackGlyphCount",
1932                0,
1933                "Array of backtracking GlyphID's (to be matched before the input sequence)",
1934            ),
1935            (
1936                "uint16",
1937                "InputGlyphCount",
1938                None,
1939                None,
1940                "Total number of glyphs in the input sequence (includes the first glyph)",
1941            ),
1942            (
1943                "GlyphID",
1944                "Input",
1945                "InputGlyphCount",
1946                -1,
1947                "Array of input GlyphIDs (start with second glyph)",
1948            ),
1949            (
1950                "uint16",
1951                "LookAheadGlyphCount",
1952                None,
1953                None,
1954                "Total number of glyphs in the look ahead sequence (number of glyphs to be matched after the input sequence)",
1955            ),
1956            (
1957                "GlyphID",
1958                "LookAhead",
1959                "LookAheadGlyphCount",
1960                0,
1961                "Array of lookahead GlyphID's (to be matched after the input sequence)",
1962            ),
1963            ("uint16", "SubstCount", None, None, "Number of SubstLookupRecords"),
1964            (
1965                "struct",
1966                "SubstLookupRecord",
1967                "SubstCount",
1968                0,
1969                "Array of SubstLookupRecords (in design order)",
1970            ),
1971        ],
1972    ),
1973    (
1974        "ChainContextSubstFormat2",
1975        [
1976            ("uint16", "SubstFormat", None, None, "Format identifier-format = 2"),
1977            (
1978                "Offset",
1979                "Coverage",
1980                None,
1981                None,
1982                "Offset to Coverage table-from beginning of Substitution table",
1983            ),
1984            (
1985                "Offset",
1986                "BacktrackClassDef",
1987                None,
1988                None,
1989                "Offset to glyph ClassDef table containing backtrack sequence data-from beginning of Substitution table",
1990            ),
1991            (
1992                "Offset",
1993                "InputClassDef",
1994                None,
1995                None,
1996                "Offset to glyph ClassDef table containing input sequence data-from beginning of Substitution table",
1997            ),
1998            (
1999                "Offset",
2000                "LookAheadClassDef",
2001                None,
2002                None,
2003                "Offset to glyph ClassDef table containing lookahead sequence data-from beginning of Substitution table",
2004            ),
2005            (
2006                "uint16",
2007                "ChainSubClassSetCount",
2008                None,
2009                None,
2010                "Number of ChainSubClassSet tables",
2011            ),
2012            (
2013                "Offset",
2014                "ChainSubClassSet",
2015                "ChainSubClassSetCount",
2016                0,
2017                "Array of offsets to ChainSubClassSet tables-from beginning of Substitution table-ordered by input class-may be NULL",
2018            ),
2019        ],
2020    ),
2021    (
2022        "ChainSubClassSet",
2023        [
2024            (
2025                "uint16",
2026                "ChainSubClassRuleCount",
2027                None,
2028                None,
2029                "Number of ChainSubClassRule tables",
2030            ),
2031            (
2032                "Offset",
2033                "ChainSubClassRule",
2034                "ChainSubClassRuleCount",
2035                0,
2036                "Array of offsets to ChainSubClassRule tables-from beginning of ChainSubClassSet-ordered by preference",
2037            ),
2038        ],
2039    ),
2040    (
2041        "ChainSubClassRule",
2042        [
2043            (
2044                "uint16",
2045                "BacktrackGlyphCount",
2046                None,
2047                None,
2048                "Total number of glyphs in the backtrack sequence (number of glyphs to be matched before the first glyph)",
2049            ),
2050            (
2051                "uint16",
2052                "Backtrack",
2053                "BacktrackGlyphCount",
2054                0,
2055                "Array of backtracking classes(to be matched before the input sequence)",
2056            ),
2057            (
2058                "uint16",
2059                "InputGlyphCount",
2060                None,
2061                None,
2062                "Total number of classes in the input sequence (includes the first class)",
2063            ),
2064            (
2065                "uint16",
2066                "Input",
2067                "InputGlyphCount",
2068                -1,
2069                "Array of input classes(start with second class; to be matched with the input glyph sequence)",
2070            ),
2071            (
2072                "uint16",
2073                "LookAheadGlyphCount",
2074                None,
2075                None,
2076                "Total number of classes in the look ahead sequence (number of classes to be matched after the input sequence)",
2077            ),
2078            (
2079                "uint16",
2080                "LookAhead",
2081                "LookAheadGlyphCount",
2082                0,
2083                "Array of lookahead classes(to be matched after the input sequence)",
2084            ),
2085            ("uint16", "SubstCount", None, None, "Number of SubstLookupRecords"),
2086            (
2087                "struct",
2088                "SubstLookupRecord",
2089                "SubstCount",
2090                0,
2091                "Array of SubstLookupRecords (in design order)",
2092            ),
2093        ],
2094    ),
2095    (
2096        "ChainContextSubstFormat3",
2097        [
2098            ("uint16", "SubstFormat", None, None, "Format identifier-format = 3"),
2099            (
2100                "uint16",
2101                "BacktrackGlyphCount",
2102                None,
2103                None,
2104                "Number of glyphs in the backtracking sequence",
2105            ),
2106            (
2107                "Offset",
2108                "BacktrackCoverage",
2109                "BacktrackGlyphCount",
2110                0,
2111                "Array of offsets to coverage tables in backtracking sequence, in glyph sequence order",
2112            ),
2113            (
2114                "uint16",
2115                "InputGlyphCount",
2116                None,
2117                None,
2118                "Number of glyphs in input sequence",
2119            ),
2120            (
2121                "Offset",
2122                "InputCoverage",
2123                "InputGlyphCount",
2124                0,
2125                "Array of offsets to coverage tables in input sequence, in glyph sequence order",
2126            ),
2127            (
2128                "uint16",
2129                "LookAheadGlyphCount",
2130                None,
2131                None,
2132                "Number of glyphs in lookahead sequence",
2133            ),
2134            (
2135                "Offset",
2136                "LookAheadCoverage",
2137                "LookAheadGlyphCount",
2138                0,
2139                "Array of offsets to coverage tables in lookahead sequence, in glyph sequence order",
2140            ),
2141            ("uint16", "SubstCount", None, None, "Number of SubstLookupRecords"),
2142            (
2143                "struct",
2144                "SubstLookupRecord",
2145                "SubstCount",
2146                0,
2147                "Array of SubstLookupRecords, in design order",
2148            ),
2149        ],
2150    ),
2151    (
2152        "ExtensionSubstFormat1",
2153        [
2154            ("uint16", "ExtFormat", None, None, "Format identifier. Set to 1."),
2155            (
2156                "uint16",
2157                "ExtensionLookupType",
2158                None,
2159                None,
2160                "Lookup type of subtable referenced by ExtensionOffset (i.e. the extension subtable).",
2161            ),
2162            (
2163                "LOffset",
2164                "ExtSubTable",
2165                None,
2166                None,
2167                "Array of offsets to Lookup tables-from beginning of LookupList -zero based (first lookup is Lookup index = 0)",
2168            ),
2169        ],
2170    ),
2171    (
2172        "ReverseChainSingleSubstFormat1",
2173        [
2174            ("uint16", "SubstFormat", None, None, "Format identifier-format = 1"),
2175            (
2176                "Offset",
2177                "Coverage",
2178                None,
2179                0,
2180                "Offset to Coverage table - from beginning of Substitution table",
2181            ),
2182            (
2183                "uint16",
2184                "BacktrackGlyphCount",
2185                None,
2186                None,
2187                "Number of glyphs in the backtracking sequence",
2188            ),
2189            (
2190                "Offset",
2191                "BacktrackCoverage",
2192                "BacktrackGlyphCount",
2193                0,
2194                "Array of offsets to coverage tables in backtracking sequence, in glyph sequence order",
2195            ),
2196            (
2197                "uint16",
2198                "LookAheadGlyphCount",
2199                None,
2200                None,
2201                "Number of glyphs in lookahead sequence",
2202            ),
2203            (
2204                "Offset",
2205                "LookAheadCoverage",
2206                "LookAheadGlyphCount",
2207                0,
2208                "Array of offsets to coverage tables in lookahead sequence, in glyph sequence order",
2209            ),
2210            (
2211                "uint16",
2212                "GlyphCount",
2213                None,
2214                None,
2215                "Number of GlyphIDs in the Substitute array",
2216            ),
2217            (
2218                "GlyphID",
2219                "Substitute",
2220                "GlyphCount",
2221                0,
2222                "Array of substitute GlyphIDs-ordered by Coverage index",
2223            ),
2224        ],
2225    ),
2226    #
2227    # gdef
2228    #
2229    (
2230        "GDEF",
2231        [
2232            (
2233                "Version",
2234                "Version",
2235                None,
2236                None,
2237                "Version of the GDEF table- 0x00010000, 0x00010002, or 0x00010003",
2238            ),
2239            (
2240                "Offset",
2241                "GlyphClassDef",
2242                None,
2243                None,
2244                "Offset to class definition table for glyph type-from beginning of GDEF header (may be NULL)",
2245            ),
2246            (
2247                "Offset",
2248                "AttachList",
2249                None,
2250                None,
2251                "Offset to list of glyphs with attachment points-from beginning of GDEF header (may be NULL)",
2252            ),
2253            (
2254                "Offset",
2255                "LigCaretList",
2256                None,
2257                None,
2258                "Offset to list of positioning points for ligature carets-from beginning of GDEF header (may be NULL)",
2259            ),
2260            (
2261                "Offset",
2262                "MarkAttachClassDef",
2263                None,
2264                None,
2265                "Offset to class definition table for mark attachment type-from beginning of GDEF header (may be NULL)",
2266            ),
2267            (
2268                "Offset",
2269                "MarkGlyphSetsDef",
2270                None,
2271                "Version >= 0x00010002",
2272                "Offset to the table of mark set definitions-from beginning of GDEF header (may be NULL)",
2273            ),
2274            (
2275                "LOffset",
2276                "VarStore",
2277                None,
2278                "Version >= 0x00010003",
2279                "Offset to variation store (may be NULL)",
2280            ),
2281        ],
2282    ),
2283    (
2284        "AttachList",
2285        [
2286            (
2287                "Offset",
2288                "Coverage",
2289                None,
2290                None,
2291                "Offset to Coverage table - from beginning of AttachList table",
2292            ),
2293            (
2294                "uint16",
2295                "GlyphCount",
2296                None,
2297                None,
2298                "Number of glyphs with attachment points",
2299            ),
2300            (
2301                "Offset",
2302                "AttachPoint",
2303                "GlyphCount",
2304                0,
2305                "Array of offsets to AttachPoint tables-from beginning of AttachList table-in Coverage Index order",
2306            ),
2307        ],
2308    ),
2309    (
2310        "AttachPoint",
2311        [
2312            (
2313                "uint16",
2314                "PointCount",
2315                None,
2316                None,
2317                "Number of attachment points on this glyph",
2318            ),
2319            (
2320                "uint16",
2321                "PointIndex",
2322                "PointCount",
2323                0,
2324                "Array of contour point indices -in increasing numerical order",
2325            ),
2326        ],
2327    ),
2328    (
2329        "LigCaretList",
2330        [
2331            (
2332                "Offset",
2333                "Coverage",
2334                None,
2335                None,
2336                "Offset to Coverage table - from beginning of LigCaretList table",
2337            ),
2338            ("uint16", "LigGlyphCount", None, None, "Number of ligature glyphs"),
2339            (
2340                "Offset",
2341                "LigGlyph",
2342                "LigGlyphCount",
2343                0,
2344                "Array of offsets to LigGlyph tables-from beginning of LigCaretList table-in Coverage Index order",
2345            ),
2346        ],
2347    ),
2348    (
2349        "LigGlyph",
2350        [
2351            (
2352                "uint16",
2353                "CaretCount",
2354                None,
2355                None,
2356                "Number of CaretValues for this ligature (components - 1)",
2357            ),
2358            (
2359                "Offset",
2360                "CaretValue",
2361                "CaretCount",
2362                0,
2363                "Array of offsets to CaretValue tables-from beginning of LigGlyph table-in increasing coordinate order",
2364            ),
2365        ],
2366    ),
2367    (
2368        "CaretValueFormat1",
2369        [
2370            ("uint16", "CaretValueFormat", None, None, "Format identifier-format = 1"),
2371            ("int16", "Coordinate", None, None, "X or Y value, in design units"),
2372        ],
2373    ),
2374    (
2375        "CaretValueFormat2",
2376        [
2377            ("uint16", "CaretValueFormat", None, None, "Format identifier-format = 2"),
2378            ("uint16", "CaretValuePoint", None, None, "Contour point index on glyph"),
2379        ],
2380    ),
2381    (
2382        "CaretValueFormat3",
2383        [
2384            ("uint16", "CaretValueFormat", None, None, "Format identifier-format = 3"),
2385            ("int16", "Coordinate", None, None, "X or Y value, in design units"),
2386            (
2387                "Offset",
2388                "DeviceTable",
2389                None,
2390                None,
2391                "Offset to Device table for X or Y value-from beginning of CaretValue table",
2392            ),
2393        ],
2394    ),
2395    (
2396        "MarkGlyphSetsDef",
2397        [
2398            ("uint16", "MarkSetTableFormat", None, None, "Format identifier == 1"),
2399            ("uint16", "MarkSetCount", None, None, "Number of mark sets defined"),
2400            (
2401                "LOffset",
2402                "Coverage",
2403                "MarkSetCount",
2404                0,
2405                "Array of offsets to mark set coverage tables.",
2406            ),
2407        ],
2408    ),
2409    #
2410    # base
2411    #
2412    (
2413        "BASE",
2414        [
2415            (
2416                "Version",
2417                "Version",
2418                None,
2419                None,
2420                "Version of the BASE table-initially 0x00010000",
2421            ),
2422            (
2423                "Offset",
2424                "HorizAxis",
2425                None,
2426                None,
2427                "Offset to horizontal Axis table-from beginning of BASE table-may be NULL",
2428            ),
2429            (
2430                "Offset",
2431                "VertAxis",
2432                None,
2433                None,
2434                "Offset to vertical Axis table-from beginning of BASE table-may be NULL",
2435            ),
2436            (
2437                "LOffset",
2438                "VarStore",
2439                None,
2440                "Version >= 0x00010001",
2441                "Offset to variation store (may be NULL)",
2442            ),
2443        ],
2444    ),
2445    (
2446        "Axis",
2447        [
2448            (
2449                "Offset",
2450                "BaseTagList",
2451                None,
2452                None,
2453                "Offset to BaseTagList table-from beginning of Axis table-may be NULL",
2454            ),
2455            (
2456                "Offset",
2457                "BaseScriptList",
2458                None,
2459                None,
2460                "Offset to BaseScriptList table-from beginning of Axis table",
2461            ),
2462        ],
2463    ),
2464    (
2465        "BaseTagList",
2466        [
2467            (
2468                "uint16",
2469                "BaseTagCount",
2470                None,
2471                None,
2472                "Number of baseline identification tags in this text direction-may be zero (0)",
2473            ),
2474            (
2475                "Tag",
2476                "BaselineTag",
2477                "BaseTagCount",
2478                0,
2479                "Array of 4-byte baseline identification tags-must be in alphabetical order",
2480            ),
2481        ],
2482    ),
2483    (
2484        "BaseScriptList",
2485        [
2486            (
2487                "uint16",
2488                "BaseScriptCount",
2489                None,
2490                None,
2491                "Number of BaseScriptRecords defined",
2492            ),
2493            (
2494                "struct",
2495                "BaseScriptRecord",
2496                "BaseScriptCount",
2497                0,
2498                "Array of BaseScriptRecords-in alphabetical order by BaseScriptTag",
2499            ),
2500        ],
2501    ),
2502    (
2503        "BaseScriptRecord",
2504        [
2505            ("Tag", "BaseScriptTag", None, None, "4-byte script identification tag"),
2506            (
2507                "Offset",
2508                "BaseScript",
2509                None,
2510                None,
2511                "Offset to BaseScript table-from beginning of BaseScriptList",
2512            ),
2513        ],
2514    ),
2515    (
2516        "BaseScript",
2517        [
2518            (
2519                "Offset",
2520                "BaseValues",
2521                None,
2522                None,
2523                "Offset to BaseValues table-from beginning of BaseScript table-may be NULL",
2524            ),
2525            (
2526                "Offset",
2527                "DefaultMinMax",
2528                None,
2529                None,
2530                "Offset to MinMax table- from beginning of BaseScript table-may be NULL",
2531            ),
2532            (
2533                "uint16",
2534                "BaseLangSysCount",
2535                None,
2536                None,
2537                "Number of BaseLangSysRecords defined-may be zero (0)",
2538            ),
2539            (
2540                "struct",
2541                "BaseLangSysRecord",
2542                "BaseLangSysCount",
2543                0,
2544                "Array of BaseLangSysRecords-in alphabetical order by BaseLangSysTag",
2545            ),
2546        ],
2547    ),
2548    (
2549        "BaseLangSysRecord",
2550        [
2551            (
2552                "Tag",
2553                "BaseLangSysTag",
2554                None,
2555                None,
2556                "4-byte language system identification tag",
2557            ),
2558            (
2559                "Offset",
2560                "MinMax",
2561                None,
2562                None,
2563                "Offset to MinMax table-from beginning of BaseScript table",
2564            ),
2565        ],
2566    ),
2567    (
2568        "BaseValues",
2569        [
2570            (
2571                "uint16",
2572                "DefaultIndex",
2573                None,
2574                None,
2575                "Index number of default baseline for this script-equals index position of baseline tag in BaselineArray of the BaseTagList",
2576            ),
2577            (
2578                "uint16",
2579                "BaseCoordCount",
2580                None,
2581                None,
2582                "Number of BaseCoord tables defined-should equal BaseTagCount in the BaseTagList",
2583            ),
2584            (
2585                "Offset",
2586                "BaseCoord",
2587                "BaseCoordCount",
2588                0,
2589                "Array of offsets to BaseCoord-from beginning of BaseValues table-order matches BaselineTag array in the BaseTagList",
2590            ),
2591        ],
2592    ),
2593    (
2594        "MinMax",
2595        [
2596            (
2597                "Offset",
2598                "MinCoord",
2599                None,
2600                None,
2601                "Offset to BaseCoord table-defines minimum extent value-from the beginning of MinMax table-may be NULL",
2602            ),
2603            (
2604                "Offset",
2605                "MaxCoord",
2606                None,
2607                None,
2608                "Offset to BaseCoord table-defines maximum extent value-from the beginning of MinMax table-may be NULL",
2609            ),
2610            (
2611                "uint16",
2612                "FeatMinMaxCount",
2613                None,
2614                None,
2615                "Number of FeatMinMaxRecords-may be zero (0)",
2616            ),
2617            (
2618                "struct",
2619                "FeatMinMaxRecord",
2620                "FeatMinMaxCount",
2621                0,
2622                "Array of FeatMinMaxRecords-in alphabetical order, by FeatureTableTag",
2623            ),
2624        ],
2625    ),
2626    (
2627        "FeatMinMaxRecord",
2628        [
2629            (
2630                "Tag",
2631                "FeatureTableTag",
2632                None,
2633                None,
2634                "4-byte feature identification tag-must match FeatureTag in FeatureList",
2635            ),
2636            (
2637                "Offset",
2638                "MinCoord",
2639                None,
2640                None,
2641                "Offset to BaseCoord table-defines minimum extent value-from beginning of MinMax table-may be NULL",
2642            ),
2643            (
2644                "Offset",
2645                "MaxCoord",
2646                None,
2647                None,
2648                "Offset to BaseCoord table-defines maximum extent value-from beginning of MinMax table-may be NULL",
2649            ),
2650        ],
2651    ),
2652    (
2653        "BaseCoordFormat1",
2654        [
2655            ("uint16", "BaseCoordFormat", None, None, "Format identifier-format = 1"),
2656            ("int16", "Coordinate", None, None, "X or Y value, in design units"),
2657        ],
2658    ),
2659    (
2660        "BaseCoordFormat2",
2661        [
2662            ("uint16", "BaseCoordFormat", None, None, "Format identifier-format = 2"),
2663            ("int16", "Coordinate", None, None, "X or Y value, in design units"),
2664            ("GlyphID", "ReferenceGlyph", None, None, "GlyphID of control glyph"),
2665            (
2666                "uint16",
2667                "BaseCoordPoint",
2668                None,
2669                None,
2670                "Index of contour point on the ReferenceGlyph",
2671            ),
2672        ],
2673    ),
2674    (
2675        "BaseCoordFormat3",
2676        [
2677            ("uint16", "BaseCoordFormat", None, None, "Format identifier-format = 3"),
2678            ("int16", "Coordinate", None, None, "X or Y value, in design units"),
2679            (
2680                "Offset",
2681                "DeviceTable",
2682                None,
2683                None,
2684                "Offset to Device table for X or Y value",
2685            ),
2686        ],
2687    ),
2688    #
2689    # jstf
2690    #
2691    (
2692        "JSTF",
2693        [
2694            (
2695                "Version",
2696                "Version",
2697                None,
2698                None,
2699                "Version of the JSTF table-initially set to 0x00010000",
2700            ),
2701            (
2702                "uint16",
2703                "JstfScriptCount",
2704                None,
2705                None,
2706                "Number of JstfScriptRecords in this table",
2707            ),
2708            (
2709                "struct",
2710                "JstfScriptRecord",
2711                "JstfScriptCount",
2712                0,
2713                "Array of JstfScriptRecords-in alphabetical order, by JstfScriptTag",
2714            ),
2715        ],
2716    ),
2717    (
2718        "JstfScriptRecord",
2719        [
2720            ("Tag", "JstfScriptTag", None, None, "4-byte JstfScript identification"),
2721            (
2722                "Offset",
2723                "JstfScript",
2724                None,
2725                None,
2726                "Offset to JstfScript table-from beginning of JSTF Header",
2727            ),
2728        ],
2729    ),
2730    (
2731        "JstfScript",
2732        [
2733            (
2734                "Offset",
2735                "ExtenderGlyph",
2736                None,
2737                None,
2738                "Offset to ExtenderGlyph table-from beginning of JstfScript table-may be NULL",
2739            ),
2740            (
2741                "Offset",
2742                "DefJstfLangSys",
2743                None,
2744                None,
2745                "Offset to Default JstfLangSys table-from beginning of JstfScript table-may be NULL",
2746            ),
2747            (
2748                "uint16",
2749                "JstfLangSysCount",
2750                None,
2751                None,
2752                "Number of JstfLangSysRecords in this table- may be zero (0)",
2753            ),
2754            (
2755                "struct",
2756                "JstfLangSysRecord",
2757                "JstfLangSysCount",
2758                0,
2759                "Array of JstfLangSysRecords-in alphabetical order, by JstfLangSysTag",
2760            ),
2761        ],
2762    ),
2763    (
2764        "JstfLangSysRecord",
2765        [
2766            ("Tag", "JstfLangSysTag", None, None, "4-byte JstfLangSys identifier"),
2767            (
2768                "Offset",
2769                "JstfLangSys",
2770                None,
2771                None,
2772                "Offset to JstfLangSys table-from beginning of JstfScript table",
2773            ),
2774        ],
2775    ),
2776    (
2777        "ExtenderGlyph",
2778        [
2779            (
2780                "uint16",
2781                "GlyphCount",
2782                None,
2783                None,
2784                "Number of Extender Glyphs in this script",
2785            ),
2786            (
2787                "GlyphID",
2788                "ExtenderGlyph",
2789                "GlyphCount",
2790                0,
2791                "GlyphIDs-in increasing numerical order",
2792            ),
2793        ],
2794    ),
2795    (
2796        "JstfLangSys",
2797        [
2798            (
2799                "uint16",
2800                "JstfPriorityCount",
2801                None,
2802                None,
2803                "Number of JstfPriority tables",
2804            ),
2805            (
2806                "Offset",
2807                "JstfPriority",
2808                "JstfPriorityCount",
2809                0,
2810                "Array of offsets to JstfPriority tables-from beginning of JstfLangSys table-in priority order",
2811            ),
2812        ],
2813    ),
2814    (
2815        "JstfPriority",
2816        [
2817            (
2818                "Offset",
2819                "ShrinkageEnableGSUB",
2820                None,
2821                None,
2822                "Offset to Shrinkage Enable JstfGSUBModList table-from beginning of JstfPriority table-may be NULL",
2823            ),
2824            (
2825                "Offset",
2826                "ShrinkageDisableGSUB",
2827                None,
2828                None,
2829                "Offset to Shrinkage Disable JstfGSUBModList table-from beginning of JstfPriority table-may be NULL",
2830            ),
2831            (
2832                "Offset",
2833                "ShrinkageEnableGPOS",
2834                None,
2835                None,
2836                "Offset to Shrinkage Enable JstfGPOSModList table-from beginning of JstfPriority table-may be NULL",
2837            ),
2838            (
2839                "Offset",
2840                "ShrinkageDisableGPOS",
2841                None,
2842                None,
2843                "Offset to Shrinkage Disable JstfGPOSModList table-from beginning of JstfPriority table-may be NULL",
2844            ),
2845            (
2846                "Offset",
2847                "ShrinkageJstfMax",
2848                None,
2849                None,
2850                "Offset to Shrinkage JstfMax table-from beginning of JstfPriority table -may be NULL",
2851            ),
2852            (
2853                "Offset",
2854                "ExtensionEnableGSUB",
2855                None,
2856                None,
2857                "Offset to Extension Enable JstfGSUBModList table-may be NULL",
2858            ),
2859            (
2860                "Offset",
2861                "ExtensionDisableGSUB",
2862                None,
2863                None,
2864                "Offset to Extension Disable JstfGSUBModList table-from beginning of JstfPriority table-may be NULL",
2865            ),
2866            (
2867                "Offset",
2868                "ExtensionEnableGPOS",
2869                None,
2870                None,
2871                "Offset to Extension Enable JstfGSUBModList table-may be NULL",
2872            ),
2873            (
2874                "Offset",
2875                "ExtensionDisableGPOS",
2876                None,
2877                None,
2878                "Offset to Extension Disable JstfGSUBModList table-from beginning of JstfPriority table-may be NULL",
2879            ),
2880            (
2881                "Offset",
2882                "ExtensionJstfMax",
2883                None,
2884                None,
2885                "Offset to Extension JstfMax table-from beginning of JstfPriority table -may be NULL",
2886            ),
2887        ],
2888    ),
2889    (
2890        "JstfGSUBModList",
2891        [
2892            (
2893                "uint16",
2894                "LookupCount",
2895                None,
2896                None,
2897                "Number of lookups for this modification",
2898            ),
2899            (
2900                "uint16",
2901                "GSUBLookupIndex",
2902                "LookupCount",
2903                0,
2904                "Array of LookupIndex identifiers in GSUB-in increasing numerical order",
2905            ),
2906        ],
2907    ),
2908    (
2909        "JstfGPOSModList",
2910        [
2911            (
2912                "uint16",
2913                "LookupCount",
2914                None,
2915                None,
2916                "Number of lookups for this modification",
2917            ),
2918            (
2919                "uint16",
2920                "GPOSLookupIndex",
2921                "LookupCount",
2922                0,
2923                "Array of LookupIndex identifiers in GPOS-in increasing numerical order",
2924            ),
2925        ],
2926    ),
2927    (
2928        "JstfMax",
2929        [
2930            (
2931                "uint16",
2932                "LookupCount",
2933                None,
2934                None,
2935                "Number of lookup Indices for this modification",
2936            ),
2937            (
2938                "Offset",
2939                "Lookup",
2940                "LookupCount",
2941                0,
2942                "Array of offsets to GPOS-type lookup tables-from beginning of JstfMax table-in design order",
2943            ),
2944        ],
2945    ),
2946    #
2947    # STAT
2948    #
2949    (
2950        "STAT",
2951        [
2952            (
2953                "Version",
2954                "Version",
2955                None,
2956                None,
2957                "Version of the table-initially set to 0x00010000, currently 0x00010002.",
2958            ),
2959            (
2960                "uint16",
2961                "DesignAxisRecordSize",
2962                None,
2963                None,
2964                "Size in bytes of each design axis record",
2965            ),
2966            ("uint16", "DesignAxisCount", None, None, "Number of design axis records"),
2967            (
2968                "LOffsetTo(AxisRecordArray)",
2969                "DesignAxisRecord",
2970                None,
2971                None,
2972                "Offset in bytes from the beginning of the STAT table to the start of the design axes array",
2973            ),
2974            ("uint16", "AxisValueCount", None, None, "Number of axis value tables"),
2975            (
2976                "LOffsetTo(AxisValueArray)",
2977                "AxisValueArray",
2978                None,
2979                None,
2980                "Offset in bytes from the beginning of the STAT table to the start of the axes value offset array",
2981            ),
2982            (
2983                "NameID",
2984                "ElidedFallbackNameID",
2985                None,
2986                "Version >= 0x00010001",
2987                "NameID to use when all style attributes are elided.",
2988            ),
2989        ],
2990    ),
2991    (
2992        "AxisRecordArray",
2993        [
2994            ("AxisRecord", "Axis", "DesignAxisCount", 0, "Axis records"),
2995        ],
2996    ),
2997    (
2998        "AxisRecord",
2999        [
3000            (
3001                "Tag",
3002                "AxisTag",
3003                None,
3004                None,
3005                "A tag identifying the axis of design variation",
3006            ),
3007            (
3008                "NameID",
3009                "AxisNameID",
3010                None,
3011                None,
3012                'The name ID for entries in the "name" table that provide a display string for this axis',
3013            ),
3014            (
3015                "uint16",
3016                "AxisOrdering",
3017                None,
3018                None,
3019                "A value that applications can use to determine primary sorting of face names, or for ordering of descriptors when composing family or face names",
3020            ),
3021            (
3022                "uint8",
3023                "MoreBytes",
3024                "DesignAxisRecordSize",
3025                -8,
3026                "Extra bytes.  Set to empty array.",
3027            ),
3028        ],
3029    ),
3030    (
3031        "AxisValueArray",
3032        [
3033            ("Offset", "AxisValue", "AxisValueCount", 0, "Axis values"),
3034        ],
3035    ),
3036    (
3037        "AxisValueFormat1",
3038        [
3039            ("uint16", "Format", None, None, "Format, = 1"),
3040            (
3041                "uint16",
3042                "AxisIndex",
3043                None,
3044                None,
3045                "Index into the axis record array identifying the axis of design variation to which the axis value record applies.",
3046            ),
3047            ("STATFlags", "Flags", None, None, "Flags."),
3048            ("NameID", "ValueNameID", None, None, ""),
3049            ("Fixed", "Value", None, None, ""),
3050        ],
3051    ),
3052    (
3053        "AxisValueFormat2",
3054        [
3055            ("uint16", "Format", None, None, "Format, = 2"),
3056            (
3057                "uint16",
3058                "AxisIndex",
3059                None,
3060                None,
3061                "Index into the axis record array identifying the axis of design variation to which the axis value record applies.",
3062            ),
3063            ("STATFlags", "Flags", None, None, "Flags."),
3064            ("NameID", "ValueNameID", None, None, ""),
3065            ("Fixed", "NominalValue", None, None, ""),
3066            ("Fixed", "RangeMinValue", None, None, ""),
3067            ("Fixed", "RangeMaxValue", None, None, ""),
3068        ],
3069    ),
3070    (
3071        "AxisValueFormat3",
3072        [
3073            ("uint16", "Format", None, None, "Format, = 3"),
3074            (
3075                "uint16",
3076                "AxisIndex",
3077                None,
3078                None,
3079                "Index into the axis record array identifying the axis of design variation to which the axis value record applies.",
3080            ),
3081            ("STATFlags", "Flags", None, None, "Flags."),
3082            ("NameID", "ValueNameID", None, None, ""),
3083            ("Fixed", "Value", None, None, ""),
3084            ("Fixed", "LinkedValue", None, None, ""),
3085        ],
3086    ),
3087    (
3088        "AxisValueFormat4",
3089        [
3090            ("uint16", "Format", None, None, "Format, = 4"),
3091            (
3092                "uint16",
3093                "AxisCount",
3094                None,
3095                None,
3096                "The total number of axes contributing to this axis-values combination.",
3097            ),
3098            ("STATFlags", "Flags", None, None, "Flags."),
3099            ("NameID", "ValueNameID", None, None, ""),
3100            (
3101                "struct",
3102                "AxisValueRecord",
3103                "AxisCount",
3104                0,
3105                "Array of AxisValue records that provide the combination of axis values, one for each contributing axis. ",
3106            ),
3107        ],
3108    ),
3109    (
3110        "AxisValueRecord",
3111        [
3112            (
3113                "uint16",
3114                "AxisIndex",
3115                None,
3116                None,
3117                "Index into the axis record array identifying the axis of design variation to which the axis value record applies.",
3118            ),
3119            ("Fixed", "Value", None, None, "A numeric value for this attribute value."),
3120        ],
3121    ),
3122    #
3123    # Variation fonts
3124    #
3125    # GSUB/GPOS FeatureVariations
3126    (
3127        "FeatureVariations",
3128        [
3129            (
3130                "Version",
3131                "Version",
3132                None,
3133                None,
3134                "Version of the table-initially set to 0x00010000",
3135            ),
3136            (
3137                "uint32",
3138                "FeatureVariationCount",
3139                None,
3140                None,
3141                "Number of records in the FeatureVariationRecord array",
3142            ),
3143            (
3144                "struct",
3145                "FeatureVariationRecord",
3146                "FeatureVariationCount",
3147                0,
3148                "Array of FeatureVariationRecord",
3149            ),
3150        ],
3151    ),
3152    (
3153        "FeatureVariationRecord",
3154        [
3155            (
3156                "LOffset",
3157                "ConditionSet",
3158                None,
3159                None,
3160                "Offset to a ConditionSet table, from beginning of the FeatureVariations table.",
3161            ),
3162            (
3163                "LOffset",
3164                "FeatureTableSubstitution",
3165                None,
3166                None,
3167                "Offset to a FeatureTableSubstitution table, from beginning of the FeatureVariations table",
3168            ),
3169        ],
3170    ),
3171    (
3172        "ConditionSet",
3173        [
3174            (
3175                "uint16",
3176                "ConditionCount",
3177                None,
3178                None,
3179                "Number of condition tables in the ConditionTable array",
3180            ),
3181            (
3182                "LOffset",
3183                "ConditionTable",
3184                "ConditionCount",
3185                0,
3186                "Array of condition tables.",
3187            ),
3188        ],
3189    ),
3190    (
3191        "ConditionTableFormat1",
3192        [
3193            ("uint16", "Format", None, None, "Format, = 1"),
3194            (
3195                "uint16",
3196                "AxisIndex",
3197                None,
3198                None,
3199                "Index for the variation axis within the fvar table, base 0.",
3200            ),
3201            (
3202                "F2Dot14",
3203                "FilterRangeMinValue",
3204                None,
3205                None,
3206                "Minimum normalized axis value of the font variation instances that satisfy this condition.",
3207            ),
3208            (
3209                "F2Dot14",
3210                "FilterRangeMaxValue",
3211                None,
3212                None,
3213                "Maximum value that satisfies this condition.",
3214            ),
3215        ],
3216    ),
3217    (
3218        "FeatureTableSubstitution",
3219        [
3220            (
3221                "Version",
3222                "Version",
3223                None,
3224                None,
3225                "Version of the table-initially set to 0x00010000",
3226            ),
3227            (
3228                "uint16",
3229                "SubstitutionCount",
3230                None,
3231                None,
3232                "Number of records in the FeatureVariationRecords array",
3233            ),
3234            (
3235                "FeatureTableSubstitutionRecord",
3236                "SubstitutionRecord",
3237                "SubstitutionCount",
3238                0,
3239                "Array of FeatureTableSubstitutionRecord",
3240            ),
3241        ],
3242    ),
3243    (
3244        "FeatureTableSubstitutionRecord",
3245        [
3246            ("uint16", "FeatureIndex", None, None, "The feature table index to match."),
3247            (
3248                "LOffset",
3249                "Feature",
3250                None,
3251                None,
3252                "Offset to an alternate feature table, from start of the FeatureTableSubstitution table.",
3253            ),
3254        ],
3255    ),
3256    # VariationStore
3257    (
3258        "VarRegionAxis",
3259        [
3260            ("F2Dot14", "StartCoord", None, None, ""),
3261            ("F2Dot14", "PeakCoord", None, None, ""),
3262            ("F2Dot14", "EndCoord", None, None, ""),
3263        ],
3264    ),
3265    (
3266        "VarRegion",
3267        [
3268            ("struct", "VarRegionAxis", "RegionAxisCount", 0, ""),
3269        ],
3270    ),
3271    (
3272        "VarRegionList",
3273        [
3274            ("uint16", "RegionAxisCount", None, None, ""),
3275            ("uint16", "RegionCount", None, None, ""),
3276            ("VarRegion", "Region", "RegionCount", 0, ""),
3277        ],
3278    ),
3279    (
3280        "VarData",
3281        [
3282            ("uint16", "ItemCount", None, None, ""),
3283            ("uint16", "NumShorts", None, None, ""),
3284            ("uint16", "VarRegionCount", None, None, ""),
3285            ("uint16", "VarRegionIndex", "VarRegionCount", 0, ""),
3286            ("VarDataValue", "Item", "ItemCount", 0, ""),
3287        ],
3288    ),
3289    (
3290        "VarStore",
3291        [
3292            ("uint16", "Format", None, None, "Set to 1."),
3293            ("LOffset", "VarRegionList", None, None, ""),
3294            ("uint16", "VarDataCount", None, None, ""),
3295            ("LOffset", "VarData", "VarDataCount", 0, ""),
3296        ],
3297    ),
3298    # Variation helpers
3299    (
3300        "VarIdxMap",
3301        [
3302            ("uint16", "EntryFormat", None, None, ""),  # Automatically computed
3303            ("uint16", "MappingCount", None, None, ""),  # Automatically computed
3304            ("VarIdxMapValue", "mapping", "", 0, "Array of compressed data"),
3305        ],
3306    ),
3307    (
3308        "DeltaSetIndexMapFormat0",
3309        [
3310            ("uint8", "Format", None, None, "Format of the DeltaSetIndexMap = 0"),
3311            ("uint8", "EntryFormat", None, None, ""),  # Automatically computed
3312            ("uint16", "MappingCount", None, None, ""),  # Automatically computed
3313            ("VarIdxMapValue", "mapping", "", 0, "Array of compressed data"),
3314        ],
3315    ),
3316    (
3317        "DeltaSetIndexMapFormat1",
3318        [
3319            ("uint8", "Format", None, None, "Format of the DeltaSetIndexMap = 1"),
3320            ("uint8", "EntryFormat", None, None, ""),  # Automatically computed
3321            ("uint32", "MappingCount", None, None, ""),  # Automatically computed
3322            ("VarIdxMapValue", "mapping", "", 0, "Array of compressed data"),
3323        ],
3324    ),
3325    # Glyph advance variations
3326    (
3327        "HVAR",
3328        [
3329            (
3330                "Version",
3331                "Version",
3332                None,
3333                None,
3334                "Version of the HVAR table-initially = 0x00010000",
3335            ),
3336            ("LOffset", "VarStore", None, None, ""),
3337            ("LOffsetTo(VarIdxMap)", "AdvWidthMap", None, None, ""),
3338            ("LOffsetTo(VarIdxMap)", "LsbMap", None, None, ""),
3339            ("LOffsetTo(VarIdxMap)", "RsbMap", None, None, ""),
3340        ],
3341    ),
3342    (
3343        "VVAR",
3344        [
3345            (
3346                "Version",
3347                "Version",
3348                None,
3349                None,
3350                "Version of the VVAR table-initially = 0x00010000",
3351            ),
3352            ("LOffset", "VarStore", None, None, ""),
3353            ("LOffsetTo(VarIdxMap)", "AdvHeightMap", None, None, ""),
3354            ("LOffsetTo(VarIdxMap)", "TsbMap", None, None, ""),
3355            ("LOffsetTo(VarIdxMap)", "BsbMap", None, None, ""),
3356            ("LOffsetTo(VarIdxMap)", "VOrgMap", None, None, "Vertical origin mapping."),
3357        ],
3358    ),
3359    # Font-wide metrics variations
3360    (
3361        "MetricsValueRecord",
3362        [
3363            ("Tag", "ValueTag", None, None, "4-byte font-wide measure identifier"),
3364            ("uint32", "VarIdx", None, None, "Combined outer-inner variation index"),
3365            (
3366                "uint8",
3367                "MoreBytes",
3368                "ValueRecordSize",
3369                -8,
3370                "Extra bytes.  Set to empty array.",
3371            ),
3372        ],
3373    ),
3374    (
3375        "MVAR",
3376        [
3377            (
3378                "Version",
3379                "Version",
3380                None,
3381                None,
3382                "Version of the MVAR table-initially = 0x00010000",
3383            ),
3384            ("uint16", "Reserved", None, None, "Set to 0"),
3385            ("uint16", "ValueRecordSize", None, None, ""),
3386            ("uint16", "ValueRecordCount", None, None, ""),
3387            ("Offset", "VarStore", None, None, ""),
3388            ("MetricsValueRecord", "ValueRecord", "ValueRecordCount", 0, ""),
3389        ],
3390    ),
3391    #
3392    # math
3393    #
3394    (
3395        "MATH",
3396        [
3397            (
3398                "Version",
3399                "Version",
3400                None,
3401                None,
3402                "Version of the MATH table-initially set to 0x00010000.",
3403            ),
3404            (
3405                "Offset",
3406                "MathConstants",
3407                None,
3408                None,
3409                "Offset to MathConstants table - from the beginning of MATH table.",
3410            ),
3411            (
3412                "Offset",
3413                "MathGlyphInfo",
3414                None,
3415                None,
3416                "Offset to MathGlyphInfo table - from the beginning of MATH table.",
3417            ),
3418            (
3419                "Offset",
3420                "MathVariants",
3421                None,
3422                None,
3423                "Offset to MathVariants table - from the beginning of MATH table.",
3424            ),
3425        ],
3426    ),
3427    (
3428        "MathValueRecord",
3429        [
3430            ("int16", "Value", None, None, "The X or Y value in design units."),
3431            (
3432                "Offset",
3433                "DeviceTable",
3434                None,
3435                None,
3436                "Offset to the device table - from the beginning of parent table. May be NULL. Suggested format for device table is 1.",
3437            ),
3438        ],
3439    ),
3440    (
3441        "MathConstants",
3442        [
3443            (
3444                "int16",
3445                "ScriptPercentScaleDown",
3446                None,
3447                None,
3448                "Percentage of scaling down for script level 1. Suggested value: 80%.",
3449            ),
3450            (
3451                "int16",
3452                "ScriptScriptPercentScaleDown",
3453                None,
3454                None,
3455                "Percentage of scaling down for script level 2 (ScriptScript). Suggested value: 60%.",
3456            ),
3457            (
3458                "uint16",
3459                "DelimitedSubFormulaMinHeight",
3460                None,
3461                None,
3462                "Minimum height required for a delimited expression to be treated as a subformula. Suggested value: normal line height x1.5.",
3463            ),
3464            (
3465                "uint16",
3466                "DisplayOperatorMinHeight",
3467                None,
3468                None,
3469                "Minimum height of n-ary operators (such as integral and summation) for formulas in display mode.",
3470            ),
3471            (
3472                "MathValueRecord",
3473                "MathLeading",
3474                None,
3475                None,
3476                "White space to be left between math formulas to ensure proper line spacing. For example, for applications that treat line gap as a part of line ascender, formulas with ink  going above (os2.sTypoAscender + os2.sTypoLineGap - MathLeading) or with ink going below os2.sTypoDescender will result in increasing line height.",
3477            ),
3478            ("MathValueRecord", "AxisHeight", None, None, "Axis height of the font."),
3479            (
3480                "MathValueRecord",
3481                "AccentBaseHeight",
3482                None,
3483                None,
3484                "Maximum (ink) height of accent base that does not require raising the accents. Suggested: x-height of the font (os2.sxHeight) plus any possible overshots.",
3485            ),
3486            (
3487                "MathValueRecord",
3488                "FlattenedAccentBaseHeight",
3489                None,
3490                None,
3491                "Maximum (ink) height of accent base that does not require flattening the accents. Suggested: cap height of the font (os2.sCapHeight).",
3492            ),
3493            (
3494                "MathValueRecord",
3495                "SubscriptShiftDown",
3496                None,
3497                None,
3498                "The standard shift down applied to subscript elements. Positive for moving in the downward direction. Suggested: os2.ySubscriptYOffset.",
3499            ),
3500            (
3501                "MathValueRecord",
3502                "SubscriptTopMax",
3503                None,
3504                None,
3505                "Maximum allowed height of the (ink) top of subscripts that does not require moving subscripts further down. Suggested: 4/5 x-height.",
3506            ),
3507            (
3508                "MathValueRecord",
3509                "SubscriptBaselineDropMin",
3510                None,
3511                None,
3512                "Minimum allowed drop of the baseline of subscripts relative to the (ink) bottom of the base. Checked for bases that are treated as a box or extended shape. Positive for subscript baseline dropped below the base bottom.",
3513            ),
3514            (
3515                "MathValueRecord",
3516                "SuperscriptShiftUp",
3517                None,
3518                None,
3519                "Standard shift up applied to superscript elements. Suggested: os2.ySuperscriptYOffset.",
3520            ),
3521            (
3522                "MathValueRecord",
3523                "SuperscriptShiftUpCramped",
3524                None,
3525                None,
3526                "Standard shift of superscripts relative to the base, in cramped style.",
3527            ),
3528            (
3529                "MathValueRecord",
3530                "SuperscriptBottomMin",
3531                None,
3532                None,
3533                "Minimum allowed height of the (ink) bottom of superscripts that does not require moving subscripts further up. Suggested: 1/4 x-height.",
3534            ),
3535            (
3536                "MathValueRecord",
3537                "SuperscriptBaselineDropMax",
3538                None,
3539                None,
3540                "Maximum allowed drop of the baseline of superscripts relative to the (ink) top of the base. Checked for bases that are treated as a box or extended shape. Positive for superscript baseline below the base top.",
3541            ),
3542            (
3543                "MathValueRecord",
3544                "SubSuperscriptGapMin",
3545                None,
3546                None,
3547                "Minimum gap between the superscript and subscript ink. Suggested: 4x default rule thickness.",
3548            ),
3549            (
3550                "MathValueRecord",
3551                "SuperscriptBottomMaxWithSubscript",
3552                None,
3553                None,
3554                "The maximum level to which the (ink) bottom of superscript can be pushed to increase the gap between superscript and subscript, before subscript starts being moved down. Suggested: 4/5 x-height.",
3555            ),
3556            (
3557                "MathValueRecord",
3558                "SpaceAfterScript",
3559                None,
3560                None,
3561                "Extra white space to be added after each subscript and superscript. Suggested: 0.5pt for a 12 pt font.",
3562            ),
3563            (
3564                "MathValueRecord",
3565                "UpperLimitGapMin",
3566                None,
3567                None,
3568                "Minimum gap between the (ink) bottom of the upper limit, and the (ink) top of the base operator.",
3569            ),
3570            (
3571                "MathValueRecord",
3572                "UpperLimitBaselineRiseMin",
3573                None,
3574                None,
3575                "Minimum distance between baseline of upper limit and (ink) top of the base operator.",
3576            ),
3577            (
3578                "MathValueRecord",
3579                "LowerLimitGapMin",
3580                None,
3581                None,
3582                "Minimum gap between (ink) top of the lower limit, and (ink) bottom of the base operator.",
3583            ),
3584            (
3585                "MathValueRecord",
3586                "LowerLimitBaselineDropMin",
3587                None,
3588                None,
3589                "Minimum distance between baseline of the lower limit and (ink) bottom of the base operator.",
3590            ),
3591            (
3592                "MathValueRecord",
3593                "StackTopShiftUp",
3594                None,
3595                None,
3596                "Standard shift up applied to the top element of a stack.",
3597            ),
3598            (
3599                "MathValueRecord",
3600                "StackTopDisplayStyleShiftUp",
3601                None,
3602                None,
3603                "Standard shift up applied to the top element of a stack in display style.",
3604            ),
3605            (
3606                "MathValueRecord",
3607                "StackBottomShiftDown",
3608                None,
3609                None,
3610                "Standard shift down applied to the bottom element of a stack. Positive for moving in the downward direction.",
3611            ),
3612            (
3613                "MathValueRecord",
3614                "StackBottomDisplayStyleShiftDown",
3615                None,
3616                None,
3617                "Standard shift down applied to the bottom element of a stack in display style. Positive for moving in the downward direction.",
3618            ),
3619            (
3620                "MathValueRecord",
3621                "StackGapMin",
3622                None,
3623                None,
3624                "Minimum gap between (ink) bottom of the top element of a stack, and the (ink) top of the bottom element. Suggested: 3x default rule thickness.",
3625            ),
3626            (
3627                "MathValueRecord",
3628                "StackDisplayStyleGapMin",
3629                None,
3630                None,
3631                "Minimum gap between (ink) bottom of the top element of a stack, and the (ink) top of the bottom element in display style. Suggested: 7x default rule thickness.",
3632            ),
3633            (
3634                "MathValueRecord",
3635                "StretchStackTopShiftUp",
3636                None,
3637                None,
3638                "Standard shift up applied to the top element of the stretch stack.",
3639            ),
3640            (
3641                "MathValueRecord",
3642                "StretchStackBottomShiftDown",
3643                None,
3644                None,
3645                "Standard shift down applied to the bottom element of the stretch stack. Positive for moving in the downward direction.",
3646            ),
3647            (
3648                "MathValueRecord",
3649                "StretchStackGapAboveMin",
3650                None,
3651                None,
3652                "Minimum gap between the ink of the stretched element, and the (ink) bottom of the element above. Suggested: UpperLimitGapMin",
3653            ),
3654            (
3655                "MathValueRecord",
3656                "StretchStackGapBelowMin",
3657                None,
3658                None,
3659                "Minimum gap between the ink of the stretched element, and the (ink) top of the element below. Suggested: LowerLimitGapMin.",
3660            ),
3661            (
3662                "MathValueRecord",
3663                "FractionNumeratorShiftUp",
3664                None,
3665                None,
3666                "Standard shift up applied to the numerator.",
3667            ),
3668            (
3669                "MathValueRecord",
3670                "FractionNumeratorDisplayStyleShiftUp",
3671                None,
3672                None,
3673                "Standard shift up applied to the numerator in display style. Suggested: StackTopDisplayStyleShiftUp.",
3674            ),
3675            (
3676                "MathValueRecord",
3677                "FractionDenominatorShiftDown",
3678                None,
3679                None,
3680                "Standard shift down applied to the denominator. Positive for moving in the downward direction.",
3681            ),
3682            (
3683                "MathValueRecord",
3684                "FractionDenominatorDisplayStyleShiftDown",
3685                None,
3686                None,
3687                "Standard shift down applied to the denominator in display style. Positive for moving in the downward direction. Suggested: StackBottomDisplayStyleShiftDown.",
3688            ),
3689            (
3690                "MathValueRecord",
3691                "FractionNumeratorGapMin",
3692                None,
3693                None,
3694                "Minimum tolerated gap between the (ink) bottom of the numerator and the ink of the fraction bar. Suggested: default rule thickness",
3695            ),
3696            (
3697                "MathValueRecord",
3698                "FractionNumDisplayStyleGapMin",
3699                None,
3700                None,
3701                "Minimum tolerated gap between the (ink) bottom of the numerator and the ink of the fraction bar in display style. Suggested: 3x default rule thickness.",
3702            ),
3703            (
3704                "MathValueRecord",
3705                "FractionRuleThickness",
3706                None,
3707                None,
3708                "Thickness of the fraction bar. Suggested: default rule thickness.",
3709            ),
3710            (
3711                "MathValueRecord",
3712                "FractionDenominatorGapMin",
3713                None,
3714                None,
3715                "Minimum tolerated gap between the (ink) top of the denominator and the ink of the fraction bar. Suggested: default rule thickness",
3716            ),
3717            (
3718                "MathValueRecord",
3719                "FractionDenomDisplayStyleGapMin",
3720                None,
3721                None,
3722                "Minimum tolerated gap between the (ink) top of the denominator and the ink of the fraction bar in display style. Suggested: 3x default rule thickness.",
3723            ),
3724            (
3725                "MathValueRecord",
3726                "SkewedFractionHorizontalGap",
3727                None,
3728                None,
3729                "Horizontal distance between the top and bottom elements of a skewed fraction.",
3730            ),
3731            (
3732                "MathValueRecord",
3733                "SkewedFractionVerticalGap",
3734                None,
3735                None,
3736                "Vertical distance between the ink of the top and bottom elements of a skewed fraction.",
3737            ),
3738            (
3739                "MathValueRecord",
3740                "OverbarVerticalGap",
3741                None,
3742                None,
3743                "Distance between the overbar and the (ink) top of he base. Suggested: 3x default rule thickness.",
3744            ),
3745            (
3746                "MathValueRecord",
3747                "OverbarRuleThickness",
3748                None,
3749                None,
3750                "Thickness of overbar. Suggested: default rule thickness.",
3751            ),
3752            (
3753                "MathValueRecord",
3754                "OverbarExtraAscender",
3755                None,
3756                None,
3757                "Extra white space reserved above the overbar. Suggested: default rule thickness.",
3758            ),
3759            (
3760                "MathValueRecord",
3761                "UnderbarVerticalGap",
3762                None,
3763                None,
3764                "Distance between underbar and (ink) bottom of the base. Suggested: 3x default rule thickness.",
3765            ),
3766            (
3767                "MathValueRecord",
3768                "UnderbarRuleThickness",
3769                None,
3770                None,
3771                "Thickness of underbar. Suggested: default rule thickness.",
3772            ),
3773            (
3774                "MathValueRecord",
3775                "UnderbarExtraDescender",
3776                None,
3777                None,
3778                "Extra white space reserved below the underbar. Always positive. Suggested: default rule thickness.",
3779            ),
3780            (
3781                "MathValueRecord",
3782                "RadicalVerticalGap",
3783                None,
3784                None,
3785                "Space between the (ink) top of the expression and the bar over it. Suggested: 1 1/4 default rule thickness.",
3786            ),
3787            (
3788                "MathValueRecord",
3789                "RadicalDisplayStyleVerticalGap",
3790                None,
3791                None,
3792                "Space between the (ink) top of the expression and the bar over it. Suggested: default rule thickness + 1/4 x-height.",
3793            ),
3794            (
3795                "MathValueRecord",
3796                "RadicalRuleThickness",
3797                None,
3798                None,
3799                "Thickness of the radical rule. This is the thickness of the rule in designed or constructed radical signs. Suggested: default rule thickness.",
3800            ),
3801            (
3802                "MathValueRecord",
3803                "RadicalExtraAscender",
3804                None,
3805                None,
3806                "Extra white space reserved above the radical. Suggested: RadicalRuleThickness.",
3807            ),
3808            (
3809                "MathValueRecord",
3810                "RadicalKernBeforeDegree",
3811                None,
3812                None,
3813                "Extra horizontal kern before the degree of a radical, if such is present. Suggested: 5/18 of em.",
3814            ),
3815            (
3816                "MathValueRecord",
3817                "RadicalKernAfterDegree",
3818                None,
3819                None,
3820                "Negative kern after the degree of a radical, if such is present. Suggested: 10/18 of em.",
3821            ),
3822            (
3823                "uint16",
3824                "RadicalDegreeBottomRaisePercent",
3825                None,
3826                None,
3827                "Height of the bottom of the radical degree, if such is present, in proportion to the ascender of the radical sign. Suggested: 60%.",
3828            ),
3829        ],
3830    ),
3831    (
3832        "MathGlyphInfo",
3833        [
3834            (
3835                "Offset",
3836                "MathItalicsCorrectionInfo",
3837                None,
3838                None,
3839                "Offset to MathItalicsCorrectionInfo table - from the beginning of MathGlyphInfo table.",
3840            ),
3841            (
3842                "Offset",
3843                "MathTopAccentAttachment",
3844                None,
3845                None,
3846                "Offset to MathTopAccentAttachment table - from the beginning of MathGlyphInfo table.",
3847            ),
3848            (
3849                "Offset",
3850                "ExtendedShapeCoverage",
3851                None,
3852                None,
3853                "Offset to coverage table for Extended Shape glyphs - from the  beginning of MathGlyphInfo table. When the left or right glyph of a box is an extended shape variant, the (ink) box (and not the default position defined by values in MathConstants table) should be used for vertical positioning purposes. May be NULL.",
3854            ),
3855            (
3856                "Offset",
3857                "MathKernInfo",
3858                None,
3859                None,
3860                "Offset to MathKernInfo table - from the beginning of MathGlyphInfo table.",
3861            ),
3862        ],
3863    ),
3864    (
3865        "MathItalicsCorrectionInfo",
3866        [
3867            (
3868                "Offset",
3869                "Coverage",
3870                None,
3871                None,
3872                "Offset to Coverage table - from the beginning of MathItalicsCorrectionInfo table.",
3873            ),
3874            (
3875                "uint16",
3876                "ItalicsCorrectionCount",
3877                None,
3878                None,
3879                "Number of italics correction values. Should coincide with the number of covered glyphs.",
3880            ),
3881            (
3882                "MathValueRecord",
3883                "ItalicsCorrection",
3884                "ItalicsCorrectionCount",
3885                0,
3886                "Array of MathValueRecords defining italics correction values for each covered glyph.",
3887            ),
3888        ],
3889    ),
3890    (
3891        "MathTopAccentAttachment",
3892        [
3893            (
3894                "Offset",
3895                "TopAccentCoverage",
3896                None,
3897                None,
3898                "Offset to Coverage table - from the beginning of  MathTopAccentAttachment table.",
3899            ),
3900            (
3901                "uint16",
3902                "TopAccentAttachmentCount",
3903                None,
3904                None,
3905                "Number of top accent attachment point values. Should coincide with the number of covered glyphs",
3906            ),
3907            (
3908                "MathValueRecord",
3909                "TopAccentAttachment",
3910                "TopAccentAttachmentCount",
3911                0,
3912                "Array of MathValueRecords defining top accent attachment points for each covered glyph",
3913            ),
3914        ],
3915    ),
3916    (
3917        "MathKernInfo",
3918        [
3919            (
3920                "Offset",
3921                "MathKernCoverage",
3922                None,
3923                None,
3924                "Offset to Coverage table - from the beginning of the MathKernInfo table.",
3925            ),
3926            ("uint16", "MathKernCount", None, None, "Number of MathKernInfoRecords."),
3927            (
3928                "MathKernInfoRecord",
3929                "MathKernInfoRecords",
3930                "MathKernCount",
3931                0,
3932                "Array of MathKernInfoRecords, per-glyph information for mathematical positioning of subscripts and superscripts.",
3933            ),
3934        ],
3935    ),
3936    (
3937        "MathKernInfoRecord",
3938        [
3939            (
3940                "Offset",
3941                "TopRightMathKern",
3942                None,
3943                None,
3944                "Offset to MathKern table for top right corner - from the beginning of MathKernInfo table. May be NULL.",
3945            ),
3946            (
3947                "Offset",
3948                "TopLeftMathKern",
3949                None,
3950                None,
3951                "Offset to MathKern table for the top left corner - from the beginning of MathKernInfo table. May be NULL.",
3952            ),
3953            (
3954                "Offset",
3955                "BottomRightMathKern",
3956                None,
3957                None,
3958                "Offset to MathKern table for bottom right corner - from the beginning of MathKernInfo table. May be NULL.",
3959            ),
3960            (
3961                "Offset",
3962                "BottomLeftMathKern",
3963                None,
3964                None,
3965                "Offset to MathKern table for bottom left corner - from the beginning of MathKernInfo table. May be NULL.",
3966            ),
3967        ],
3968    ),
3969    (
3970        "MathKern",
3971        [
3972            (
3973                "uint16",
3974                "HeightCount",
3975                None,
3976                None,
3977                "Number of heights on which the kern value changes.",
3978            ),
3979            (
3980                "MathValueRecord",
3981                "CorrectionHeight",
3982                "HeightCount",
3983                0,
3984                "Array of correction heights at which the kern value changes. Sorted by the height value in design units.",
3985            ),
3986            (
3987                "MathValueRecord",
3988                "KernValue",
3989                "HeightCount",
3990                1,
3991                "Array of kern values corresponding to heights. First value is the kern value for all heights less or equal than the first height in this table.Last value is the value to be applied for all heights greater than the last height in this table. Negative values are interpreted as move glyphs closer to each other.",
3992            ),
3993        ],
3994    ),
3995    (
3996        "MathVariants",
3997        [
3998            (
3999                "uint16",
4000                "MinConnectorOverlap",
4001                None,
4002                None,
4003                "Minimum overlap of connecting glyphs during glyph construction,  in design units.",
4004            ),
4005            (
4006                "Offset",
4007                "VertGlyphCoverage",
4008                None,
4009                None,
4010                "Offset to Coverage table - from the beginning of MathVariants table.",
4011            ),
4012            (
4013                "Offset",
4014                "HorizGlyphCoverage",
4015                None,
4016                None,
4017                "Offset to Coverage table - from the beginning of MathVariants table.",
4018            ),
4019            (
4020                "uint16",
4021                "VertGlyphCount",
4022                None,
4023                None,
4024                "Number of glyphs for which information is provided for vertically growing variants.",
4025            ),
4026            (
4027                "uint16",
4028                "HorizGlyphCount",
4029                None,
4030                None,
4031                "Number of glyphs for which information is provided for horizontally growing variants.",
4032            ),
4033            (
4034                "Offset",
4035                "VertGlyphConstruction",
4036                "VertGlyphCount",
4037                0,
4038                "Array of offsets to MathGlyphConstruction tables - from the beginning of the MathVariants table, for shapes growing in vertical direction.",
4039            ),
4040            (
4041                "Offset",
4042                "HorizGlyphConstruction",
4043                "HorizGlyphCount",
4044                0,
4045                "Array of offsets to MathGlyphConstruction tables - from the beginning of the MathVariants table, for shapes growing in horizontal direction.",
4046            ),
4047        ],
4048    ),
4049    (
4050        "MathGlyphConstruction",
4051        [
4052            (
4053                "Offset",
4054                "GlyphAssembly",
4055                None,
4056                None,
4057                "Offset to GlyphAssembly table for this shape - from the beginning of MathGlyphConstruction table. May be NULL",
4058            ),
4059            (
4060                "uint16",
4061                "VariantCount",
4062                None,
4063                None,
4064                "Count of glyph growing variants for this glyph.",
4065            ),
4066            (
4067                "MathGlyphVariantRecord",
4068                "MathGlyphVariantRecord",
4069                "VariantCount",
4070                0,
4071                "MathGlyphVariantRecords for alternative variants of the glyphs.",
4072            ),
4073        ],
4074    ),
4075    (
4076        "MathGlyphVariantRecord",
4077        [
4078            ("GlyphID", "VariantGlyph", None, None, "Glyph ID for the variant."),
4079            (
4080                "uint16",
4081                "AdvanceMeasurement",
4082                None,
4083                None,
4084                "Advance width/height, in design units, of the variant, in the direction of requested glyph extension.",
4085            ),
4086        ],
4087    ),
4088    (
4089        "GlyphAssembly",
4090        [
4091            (
4092                "MathValueRecord",
4093                "ItalicsCorrection",
4094                None,
4095                None,
4096                "Italics correction of this GlyphAssembly. Should not depend on the assembly size.",
4097            ),
4098            ("uint16", "PartCount", None, None, "Number of parts in this assembly."),
4099            (
4100                "GlyphPartRecord",
4101                "PartRecords",
4102                "PartCount",
4103                0,
4104                "Array of part records, from left to right and bottom to top.",
4105            ),
4106        ],
4107    ),
4108    (
4109        "GlyphPartRecord",
4110        [
4111            ("GlyphID", "glyph", None, None, "Glyph ID for the part."),
4112            (
4113                "uint16",
4114                "StartConnectorLength",
4115                None,
4116                None,
4117                "Advance width/ height of the straight bar connector material, in design units, is at the beginning of the glyph, in the direction of the extension.",
4118            ),
4119            (
4120                "uint16",
4121                "EndConnectorLength",
4122                None,
4123                None,
4124                "Advance width/ height of the straight bar connector material, in design units, is at the end of the glyph, in the direction of the extension.",
4125            ),
4126            (
4127                "uint16",
4128                "FullAdvance",
4129                None,
4130                None,
4131                "Full advance width/height for this part, in the direction of the extension. In design units.",
4132            ),
4133            (
4134                "uint16",
4135                "PartFlags",
4136                None,
4137                None,
4138                "Part qualifiers. PartFlags enumeration currently uses only one bit: 0x0001 fExtender: If set, the part can be skipped or repeated. 0xFFFE Reserved",
4139            ),
4140        ],
4141    ),
4142    ##
4143    ## Apple Advanced Typography (AAT) tables
4144    ##
4145    (
4146        "AATLookupSegment",
4147        [
4148            ("uint16", "lastGlyph", None, None, "Last glyph index in this segment."),
4149            ("uint16", "firstGlyph", None, None, "First glyph index in this segment."),
4150            (
4151                "uint16",
4152                "value",
4153                None,
4154                None,
4155                "A 16-bit offset from the start of the table to the data.",
4156            ),
4157        ],
4158    ),
4159    #
4160    # ankr
4161    #
4162    (
4163        "ankr",
4164        [
4165            ("struct", "AnchorPoints", None, None, "Anchor points table."),
4166        ],
4167    ),
4168    (
4169        "AnchorPointsFormat0",
4170        [
4171            ("uint16", "Format", None, None, "Format of the anchor points table, = 0."),
4172            ("uint16", "Flags", None, None, "Flags. Currenty unused, set to zero."),
4173            (
4174                "AATLookupWithDataOffset(AnchorGlyphData)",
4175                "Anchors",
4176                None,
4177                None,
4178                "Table of with anchor overrides for each glyph.",
4179            ),
4180        ],
4181    ),
4182    (
4183        "AnchorGlyphData",
4184        [
4185            (
4186                "uint32",
4187                "AnchorPointCount",
4188                None,
4189                None,
4190                "Number of anchor points for this glyph.",
4191            ),
4192            (
4193                "struct",
4194                "AnchorPoint",
4195                "AnchorPointCount",
4196                0,
4197                "Individual anchor points.",
4198            ),
4199        ],
4200    ),
4201    (
4202        "AnchorPoint",
4203        [
4204            ("int16", "XCoordinate", None, None, "X coordinate of this anchor point."),
4205            ("int16", "YCoordinate", None, None, "Y coordinate of this anchor point."),
4206        ],
4207    ),
4208    #
4209    # bsln
4210    #
4211    (
4212        "bsln",
4213        [
4214            (
4215                "Version",
4216                "Version",
4217                None,
4218                None,
4219                "Version number of the AAT baseline table (0x00010000 for the initial version).",
4220            ),
4221            ("struct", "Baseline", None, None, "Baseline table."),
4222        ],
4223    ),
4224    (
4225        "BaselineFormat0",
4226        [
4227            ("uint16", "Format", None, None, "Format of the baseline table, = 0."),
4228            (
4229                "uint16",
4230                "DefaultBaseline",
4231                None,
4232                None,
4233                "Default baseline value for all glyphs. This value can be from 0 through 31.",
4234            ),
4235            (
4236                "uint16",
4237                "Delta",
4238                32,
4239                0,
4240                "These are the FUnit distance deltas from the font’s natural baseline to the other baselines used in the font. A total of 32 deltas must be assigned.",
4241            ),
4242        ],
4243    ),
4244    (
4245        "BaselineFormat1",
4246        [
4247            ("uint16", "Format", None, None, "Format of the baseline table, = 1."),
4248            (
4249                "uint16",
4250                "DefaultBaseline",
4251                None,
4252                None,
4253                "Default baseline value for all glyphs. This value can be from 0 through 31.",
4254            ),
4255            (
4256                "uint16",
4257                "Delta",
4258                32,
4259                0,
4260                "These are the FUnit distance deltas from the font’s natural baseline to the other baselines used in the font. A total of 32 deltas must be assigned.",
4261            ),
4262            (
4263                "AATLookup(uint16)",
4264                "BaselineValues",
4265                None,
4266                None,
4267                "Lookup table that maps glyphs to their baseline values.",
4268            ),
4269        ],
4270    ),
4271    (
4272        "BaselineFormat2",
4273        [
4274            ("uint16", "Format", None, None, "Format of the baseline table, = 1."),
4275            (
4276                "uint16",
4277                "DefaultBaseline",
4278                None,
4279                None,
4280                "Default baseline value for all glyphs. This value can be from 0 through 31.",
4281            ),
4282            (
4283                "GlyphID",
4284                "StandardGlyph",
4285                None,
4286                None,
4287                "Glyph index of the glyph in this font to be used to set the baseline values. This glyph must contain a set of control points (whose numbers are contained in the following field) that determines baseline distances.",
4288            ),
4289            (
4290                "uint16",
4291                "ControlPoint",
4292                32,
4293                0,
4294                "Array of 32 control point numbers, associated with the standard glyph. A value of 0xFFFF means there is no corresponding control point in the standard glyph.",
4295            ),
4296        ],
4297    ),
4298    (
4299        "BaselineFormat3",
4300        [
4301            ("uint16", "Format", None, None, "Format of the baseline table, = 1."),
4302            (
4303                "uint16",
4304                "DefaultBaseline",
4305                None,
4306                None,
4307                "Default baseline value for all glyphs. This value can be from 0 through 31.",
4308            ),
4309            (
4310                "GlyphID",
4311                "StandardGlyph",
4312                None,
4313                None,
4314                "Glyph index of the glyph in this font to be used to set the baseline values. This glyph must contain a set of control points (whose numbers are contained in the following field) that determines baseline distances.",
4315            ),
4316            (
4317                "uint16",
4318                "ControlPoint",
4319                32,
4320                0,
4321                "Array of 32 control point numbers, associated with the standard glyph. A value of 0xFFFF means there is no corresponding control point in the standard glyph.",
4322            ),
4323            (
4324                "AATLookup(uint16)",
4325                "BaselineValues",
4326                None,
4327                None,
4328                "Lookup table that maps glyphs to their baseline values.",
4329            ),
4330        ],
4331    ),
4332    #
4333    # cidg
4334    #
4335    (
4336        "cidg",
4337        [
4338            ("struct", "CIDGlyphMapping", None, None, "CID-to-glyph mapping table."),
4339        ],
4340    ),
4341    (
4342        "CIDGlyphMappingFormat0",
4343        [
4344            (
4345                "uint16",
4346                "Format",
4347                None,
4348                None,
4349                "Format of the CID-to-glyph mapping table, = 0.",
4350            ),
4351            ("uint16", "DataFormat", None, None, "Currenty unused, set to zero."),
4352            ("uint32", "StructLength", None, None, "Size of the table in bytes."),
4353            ("uint16", "Registry", None, None, "The registry ID."),
4354            (
4355                "char64",
4356                "RegistryName",
4357                None,
4358                None,
4359                "The registry name in ASCII; unused bytes should be set to 0.",
4360            ),
4361            ("uint16", "Order", None, None, "The order ID."),
4362            (
4363                "char64",
4364                "OrderName",
4365                None,
4366                None,
4367                "The order name in ASCII; unused bytes should be set to 0.",
4368            ),
4369            ("uint16", "SupplementVersion", None, None, "The supplement version."),
4370            (
4371                "CIDGlyphMap",
4372                "Mapping",
4373                None,
4374                None,
4375                "A mapping from CIDs to the glyphs in the font, starting with CID 0. If a CID from the identified collection has no glyph in the font, 0xFFFF is used",
4376            ),
4377        ],
4378    ),
4379    #
4380    # feat
4381    #
4382    (
4383        "feat",
4384        [
4385            (
4386                "Version",
4387                "Version",
4388                None,
4389                None,
4390                "Version of the feat table-initially set to 0x00010000.",
4391            ),
4392            ("FeatureNames", "FeatureNames", None, None, "The feature names."),
4393        ],
4394    ),
4395    (
4396        "FeatureNames",
4397        [
4398            (
4399                "uint16",
4400                "FeatureNameCount",
4401                None,
4402                None,
4403                "Number of entries in the feature name array.",
4404            ),
4405            ("uint16", "Reserved1", None, None, "Reserved (set to zero)."),
4406            ("uint32", "Reserved2", None, None, "Reserved (set to zero)."),
4407            (
4408                "FeatureName",
4409                "FeatureName",
4410                "FeatureNameCount",
4411                0,
4412                "The feature name array.",
4413            ),
4414        ],
4415    ),
4416    (
4417        "FeatureName",
4418        [
4419            ("uint16", "FeatureType", None, None, "Feature type."),
4420            (
4421                "uint16",
4422                "SettingsCount",
4423                None,
4424                None,
4425                "The number of records in the setting name array.",
4426            ),
4427            (
4428                "LOffset",
4429                "Settings",
4430                None,
4431                None,
4432                "Offset to setting table for this feature.",
4433            ),
4434            (
4435                "uint16",
4436                "FeatureFlags",
4437                None,
4438                None,
4439                "Single-bit flags associated with the feature type.",
4440            ),
4441            (
4442                "NameID",
4443                "FeatureNameID",
4444                None,
4445                None,
4446                "The name table index for the feature name.",
4447            ),
4448        ],
4449    ),
4450    (
4451        "Settings",
4452        [
4453            ("Setting", "Setting", "SettingsCount", 0, "The setting array."),
4454        ],
4455    ),
4456    (
4457        "Setting",
4458        [
4459            ("uint16", "SettingValue", None, None, "The setting."),
4460            (
4461                "NameID",
4462                "SettingNameID",
4463                None,
4464                None,
4465                "The name table index for the setting name.",
4466            ),
4467        ],
4468    ),
4469    #
4470    # gcid
4471    #
4472    (
4473        "gcid",
4474        [
4475            ("struct", "GlyphCIDMapping", None, None, "Glyph to CID mapping table."),
4476        ],
4477    ),
4478    (
4479        "GlyphCIDMappingFormat0",
4480        [
4481            (
4482                "uint16",
4483                "Format",
4484                None,
4485                None,
4486                "Format of the glyph-to-CID mapping table, = 0.",
4487            ),
4488            ("uint16", "DataFormat", None, None, "Currenty unused, set to zero."),
4489            ("uint32", "StructLength", None, None, "Size of the table in bytes."),
4490            ("uint16", "Registry", None, None, "The registry ID."),
4491            (
4492                "char64",
4493                "RegistryName",
4494                None,
4495                None,
4496                "The registry name in ASCII; unused bytes should be set to 0.",
4497            ),
4498            ("uint16", "Order", None, None, "The order ID."),
4499            (
4500                "char64",
4501                "OrderName",
4502                None,
4503                None,
4504                "The order name in ASCII; unused bytes should be set to 0.",
4505            ),
4506            ("uint16", "SupplementVersion", None, None, "The supplement version."),
4507            (
4508                "GlyphCIDMap",
4509                "Mapping",
4510                None,
4511                None,
4512                "The CIDs for the glyphs in the font, starting with glyph 0. If a glyph does not correspond to a CID in the identified collection, 0xFFFF is used",
4513            ),
4514        ],
4515    ),
4516    #
4517    # lcar
4518    #
4519    (
4520        "lcar",
4521        [
4522            (
4523                "Version",
4524                "Version",
4525                None,
4526                None,
4527                "Version number of the ligature caret table (0x00010000 for the initial version).",
4528            ),
4529            ("struct", "LigatureCarets", None, None, "Ligature carets table."),
4530        ],
4531    ),
4532    (
4533        "LigatureCaretsFormat0",
4534        [
4535            (
4536                "uint16",
4537                "Format",
4538                None,
4539                None,
4540                "Format of the ligature caret table. Format 0 indicates division points are distances in font units, Format 1 indicates division points are indexes of control points.",
4541            ),
4542            (
4543                "AATLookup(LigCaretDistances)",
4544                "Carets",
4545                None,
4546                None,
4547                "Lookup table associating ligature glyphs with their caret positions, in font unit distances.",
4548            ),
4549        ],
4550    ),
4551    (
4552        "LigatureCaretsFormat1",
4553        [
4554            (
4555                "uint16",
4556                "Format",
4557                None,
4558                None,
4559                "Format of the ligature caret table. Format 0 indicates division points are distances in font units, Format 1 indicates division points are indexes of control points.",
4560            ),
4561            (
4562                "AATLookup(LigCaretPoints)",
4563                "Carets",
4564                None,
4565                None,
4566                "Lookup table associating ligature glyphs with their caret positions, as control points.",
4567            ),
4568        ],
4569    ),
4570    (
4571        "LigCaretDistances",
4572        [
4573            ("uint16", "DivsionPointCount", None, None, "Number of division points."),
4574            (
4575                "int16",
4576                "DivisionPoint",
4577                "DivsionPointCount",
4578                0,
4579                "Distance in font units through which a subdivision is made orthogonally to the baseline.",
4580            ),
4581        ],
4582    ),
4583    (
4584        "LigCaretPoints",
4585        [
4586            ("uint16", "DivsionPointCount", None, None, "Number of division points."),
4587            (
4588                "int16",
4589                "DivisionPoint",
4590                "DivsionPointCount",
4591                0,
4592                "The number of the control point through which a subdivision is made orthogonally to the baseline.",
4593            ),
4594        ],
4595    ),
4596    #
4597    # mort
4598    #
4599    (
4600        "mort",
4601        [
4602            ("Version", "Version", None, None, "Version of the mort table."),
4603            (
4604                "uint32",
4605                "MorphChainCount",
4606                None,
4607                None,
4608                "Number of metamorphosis chains.",
4609            ),
4610            (
4611                "MortChain",
4612                "MorphChain",
4613                "MorphChainCount",
4614                0,
4615                "Array of metamorphosis chains.",
4616            ),
4617        ],
4618    ),
4619    (
4620        "MortChain",
4621        [
4622            (
4623                "Flags32",
4624                "DefaultFlags",
4625                None,
4626                None,
4627                "The default specification for subtables.",
4628            ),
4629            (
4630                "uint32",
4631                "StructLength",
4632                None,
4633                None,
4634                "Total byte count, including this header; must be a multiple of 4.",
4635            ),
4636            (
4637                "uint16",
4638                "MorphFeatureCount",
4639                None,
4640                None,
4641                "Number of metamorphosis feature entries.",
4642            ),
4643            (
4644                "uint16",
4645                "MorphSubtableCount",
4646                None,
4647                None,
4648                "The number of subtables in the chain.",
4649            ),
4650            (
4651                "struct",
4652                "MorphFeature",
4653                "MorphFeatureCount",
4654                0,
4655                "Array of metamorphosis features.",
4656            ),
4657            (
4658                "MortSubtable",
4659                "MorphSubtable",
4660                "MorphSubtableCount",
4661                0,
4662                "Array of metamorphosis subtables.",
4663            ),
4664        ],
4665    ),
4666    (
4667        "MortSubtable",
4668        [
4669            (
4670                "uint16",
4671                "StructLength",
4672                None,
4673                None,
4674                "Total subtable length, including this header.",
4675            ),
4676            (
4677                "uint8",
4678                "CoverageFlags",
4679                None,
4680                None,
4681                "Most significant byte of coverage flags.",
4682            ),
4683            ("uint8", "MorphType", None, None, "Subtable type."),
4684            (
4685                "Flags32",
4686                "SubFeatureFlags",
4687                None,
4688                None,
4689                "The 32-bit mask identifying which subtable this is (the subtable being executed if the AND of this value and the processed defaultFlags is nonzero).",
4690            ),
4691            ("SubStruct", "SubStruct", None, None, "SubTable."),
4692        ],
4693    ),
4694    #
4695    # morx
4696    #
4697    (
4698        "morx",
4699        [
4700            ("uint16", "Version", None, None, "Version of the morx table."),
4701            ("uint16", "Reserved", None, None, "Reserved (set to zero)."),
4702            (
4703                "uint32",
4704                "MorphChainCount",
4705                None,
4706                None,
4707                "Number of extended metamorphosis chains.",
4708            ),
4709            (
4710                "MorxChain",
4711                "MorphChain",
4712                "MorphChainCount",
4713                0,
4714                "Array of extended metamorphosis chains.",
4715            ),
4716        ],
4717    ),
4718    (
4719        "MorxChain",
4720        [
4721            (
4722                "Flags32",
4723                "DefaultFlags",
4724                None,
4725                None,
4726                "The default specification for subtables.",
4727            ),
4728            (
4729                "uint32",
4730                "StructLength",
4731                None,
4732                None,
4733                "Total byte count, including this header; must be a multiple of 4.",
4734            ),
4735            (
4736                "uint32",
4737                "MorphFeatureCount",
4738                None,
4739                None,
4740                "Number of feature subtable entries.",
4741            ),
4742            (
4743                "uint32",
4744                "MorphSubtableCount",
4745                None,
4746                None,
4747                "The number of subtables in the chain.",
4748            ),
4749            (
4750                "MorphFeature",
4751                "MorphFeature",
4752                "MorphFeatureCount",
4753                0,
4754                "Array of metamorphosis features.",
4755            ),
4756            (
4757                "MorxSubtable",
4758                "MorphSubtable",
4759                "MorphSubtableCount",
4760                0,
4761                "Array of extended metamorphosis subtables.",
4762            ),
4763        ],
4764    ),
4765    (
4766        "MorphFeature",
4767        [
4768            ("uint16", "FeatureType", None, None, "The type of feature."),
4769            (
4770                "uint16",
4771                "FeatureSetting",
4772                None,
4773                None,
4774                "The feature's setting (aka selector).",
4775            ),
4776            (
4777                "Flags32",
4778                "EnableFlags",
4779                None,
4780                None,
4781                "Flags for the settings that this feature and setting enables.",
4782            ),
4783            (
4784                "Flags32",
4785                "DisableFlags",
4786                None,
4787                None,
4788                "Complement of flags for the settings that this feature and setting disable.",
4789            ),
4790        ],
4791    ),
4792    # Apple TrueType Reference Manual, chapter “The ‘morx’ table”,
4793    # section “Metamorphosis Subtables”.
4794    # https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6morx.html
4795    (
4796        "MorxSubtable",
4797        [
4798            (
4799                "uint32",
4800                "StructLength",
4801                None,
4802                None,
4803                "Total subtable length, including this header.",
4804            ),
4805            (
4806                "uint8",
4807                "CoverageFlags",
4808                None,
4809                None,
4810                "Most significant byte of coverage flags.",
4811            ),
4812            ("uint16", "Reserved", None, None, "Unused."),
4813            ("uint8", "MorphType", None, None, "Subtable type."),
4814            (
4815                "Flags32",
4816                "SubFeatureFlags",
4817                None,
4818                None,
4819                "The 32-bit mask identifying which subtable this is (the subtable being executed if the AND of this value and the processed defaultFlags is nonzero).",
4820            ),
4821            ("SubStruct", "SubStruct", None, None, "SubTable."),
4822        ],
4823    ),
4824    (
4825        "StateHeader",
4826        [
4827            (
4828                "uint32",
4829                "ClassCount",
4830                None,
4831                None,
4832                "Number of classes, which is the number of 16-bit entry indices in a single line in the state array.",
4833            ),
4834            (
4835                "uint32",
4836                "MorphClass",
4837                None,
4838                None,
4839                "Offset from the start of this state table header to the start of the class table.",
4840            ),
4841            (
4842                "uint32",
4843                "StateArrayOffset",
4844                None,
4845                None,
4846                "Offset from the start of this state table header to the start of the state array.",
4847            ),
4848            (
4849                "uint32",
4850                "EntryTableOffset",
4851                None,
4852                None,
4853                "Offset from the start of this state table header to the start of the entry table.",
4854            ),
4855        ],
4856    ),
4857    (
4858        "RearrangementMorph",
4859        [
4860            (
4861                "STXHeader(RearrangementMorphAction)",
4862                "StateTable",
4863                None,
4864                None,
4865                "Finite-state transducer table for indic rearrangement.",
4866            ),
4867        ],
4868    ),
4869    (
4870        "ContextualMorph",
4871        [
4872            (
4873                "STXHeader(ContextualMorphAction)",
4874                "StateTable",
4875                None,
4876                None,
4877                "Finite-state transducer for contextual glyph substitution.",
4878            ),
4879        ],
4880    ),
4881    (
4882        "LigatureMorph",
4883        [
4884            (
4885                "STXHeader(LigatureMorphAction)",
4886                "StateTable",
4887                None,
4888                None,
4889                "Finite-state transducer for ligature substitution.",
4890            ),
4891        ],
4892    ),
4893    (
4894        "NoncontextualMorph",
4895        [
4896            (
4897                "AATLookup(GlyphID)",
4898                "Substitution",
4899                None,
4900                None,
4901                "The noncontextual glyph substitution table.",
4902            ),
4903        ],
4904    ),
4905    (
4906        "InsertionMorph",
4907        [
4908            (
4909                "STXHeader(InsertionMorphAction)",
4910                "StateTable",
4911                None,
4912                None,
4913                "Finite-state transducer for glyph insertion.",
4914            ),
4915        ],
4916    ),
4917    (
4918        "MorphClass",
4919        [
4920            (
4921                "uint16",
4922                "FirstGlyph",
4923                None,
4924                None,
4925                "Glyph index of the first glyph in the class table.",
4926            ),
4927            # ('uint16', 'GlyphCount', None, None, 'Number of glyphs in class table.'),
4928            # ('uint8', 'GlyphClass', 'GlyphCount', 0, 'The class codes (indexed by glyph index minus firstGlyph). Class codes range from 0 to the value of stateSize minus 1.'),
4929        ],
4930    ),
4931    # If the 'morx' table version is 3 or greater, then the last subtable in the chain is followed by a subtableGlyphCoverageArray, as described below.
4932    # 		('Offset', 'MarkGlyphSetsDef', None, 'round(Version*0x10000) >= 0x00010002', 'Offset to the table of mark set definitions-from beginning of GDEF header (may be NULL)'),
4933    #
4934    # prop
4935    #
4936    (
4937        "prop",
4938        [
4939            (
4940                "Fixed",
4941                "Version",
4942                None,
4943                None,
4944                "Version number of the AAT glyphs property table. Version 1.0 is the initial table version. Version 2.0, which is recognized by macOS 8.5 and later, adds support for the “attaches on right” bit. Version 3.0, which gets recognized by macOS X and iOS, adds support for the additional directional properties defined in Unicode 3.0.",
4945            ),
4946            ("struct", "GlyphProperties", None, None, "Glyph properties."),
4947        ],
4948    ),
4949    (
4950        "GlyphPropertiesFormat0",
4951        [
4952            ("uint16", "Format", None, None, "Format, = 0."),
4953            (
4954                "uint16",
4955                "DefaultProperties",
4956                None,
4957                None,
4958                "Default properties applied to a glyph. Since there is no lookup table in prop format 0, the default properties get applied to every glyph in the font.",
4959            ),
4960        ],
4961    ),
4962    (
4963        "GlyphPropertiesFormat1",
4964        [
4965            ("uint16", "Format", None, None, "Format, = 1."),
4966            (
4967                "uint16",
4968                "DefaultProperties",
4969                None,
4970                None,
4971                "Default properties applied to a glyph if that glyph is not present in the Properties lookup table.",
4972            ),
4973            (
4974                "AATLookup(uint16)",
4975                "Properties",
4976                None,
4977                None,
4978                "Lookup data associating glyphs with their properties.",
4979            ),
4980        ],
4981    ),
4982    #
4983    # opbd
4984    #
4985    (
4986        "opbd",
4987        [
4988            (
4989                "Version",
4990                "Version",
4991                None,
4992                None,
4993                "Version number of the optical bounds table (0x00010000 for the initial version).",
4994            ),
4995            ("struct", "OpticalBounds", None, None, "Optical bounds table."),
4996        ],
4997    ),
4998    (
4999        "OpticalBoundsFormat0",
5000        [
5001            (
5002                "uint16",
5003                "Format",
5004                None,
5005                None,
5006                "Format of the optical bounds table, = 0.",
5007            ),
5008            (
5009                "AATLookup(OpticalBoundsDeltas)",
5010                "OpticalBoundsDeltas",
5011                None,
5012                None,
5013                "Lookup table associating glyphs with their optical bounds, given as deltas in font units.",
5014            ),
5015        ],
5016    ),
5017    (
5018        "OpticalBoundsFormat1",
5019        [
5020            (
5021                "uint16",
5022                "Format",
5023                None,
5024                None,
5025                "Format of the optical bounds table, = 1.",
5026            ),
5027            (
5028                "AATLookup(OpticalBoundsPoints)",
5029                "OpticalBoundsPoints",
5030                None,
5031                None,
5032                "Lookup table associating glyphs with their optical bounds, given as references to control points.",
5033            ),
5034        ],
5035    ),
5036    (
5037        "OpticalBoundsDeltas",
5038        [
5039            (
5040                "int16",
5041                "Left",
5042                None,
5043                None,
5044                "Delta value for the left-side optical edge.",
5045            ),
5046            ("int16", "Top", None, None, "Delta value for the top-side optical edge."),
5047            (
5048                "int16",
5049                "Right",
5050                None,
5051                None,
5052                "Delta value for the right-side optical edge.",
5053            ),
5054            (
5055                "int16",
5056                "Bottom",
5057                None,
5058                None,
5059                "Delta value for the bottom-side optical edge.",
5060            ),
5061        ],
5062    ),
5063    (
5064        "OpticalBoundsPoints",
5065        [
5066            (
5067                "int16",
5068                "Left",
5069                None,
5070                None,
5071                "Control point index for the left-side optical edge, or -1 if this glyph has none.",
5072            ),
5073            (
5074                "int16",
5075                "Top",
5076                None,
5077                None,
5078                "Control point index for the top-side optical edge, or -1 if this glyph has none.",
5079            ),
5080            (
5081                "int16",
5082                "Right",
5083                None,
5084                None,
5085                "Control point index for the right-side optical edge, or -1 if this glyph has none.",
5086            ),
5087            (
5088                "int16",
5089                "Bottom",
5090                None,
5091                None,
5092                "Control point index for the bottom-side optical edge, or -1 if this glyph has none.",
5093            ),
5094        ],
5095    ),
5096    #
5097    # TSIC
5098    #
5099    (
5100        "TSIC",
5101        [
5102            (
5103                "Version",
5104                "Version",
5105                None,
5106                None,
5107                "Version of table initially set to 0x00010000.",
5108            ),
5109            ("uint16", "Flags", None, None, "TSIC flags - set to 0"),
5110            ("uint16", "AxisCount", None, None, "Axis count from fvar"),
5111            ("uint16", "RecordCount", None, None, "TSIC record count"),
5112            ("uint16", "Reserved", None, None, "Set to 0"),
5113            ("Tag", "AxisArray", "AxisCount", 0, "Array of axis tags in fvar order"),
5114            (
5115                "LocationRecord",
5116                "RecordLocations",
5117                "RecordCount",
5118                0,
5119                "Location in variation space of TSIC record",
5120            ),
5121            ("TSICRecord", "Record", "RecordCount", 0, "Array of TSIC records"),
5122        ],
5123    ),
5124    (
5125        "LocationRecord",
5126        [
5127            ("F2Dot14", "Axis", "AxisCount", 0, "Axis record"),
5128        ],
5129    ),
5130    (
5131        "TSICRecord",
5132        [
5133            ("uint16", "Flags", None, None, "Record flags - set to 0"),
5134            ("uint16", "NumCVTEntries", None, None, "Number of CVT number value pairs"),
5135            ("uint16", "NameLength", None, None, "Length of optional user record name"),
5136            ("uint16", "NameArray", "NameLength", 0, "Unicode 16 name"),
5137            ("uint16", "CVTArray", "NumCVTEntries", 0, "CVT number array"),
5138            ("int16", "CVTValueArray", "NumCVTEntries", 0, "CVT value"),
5139        ],
5140    ),
5141    #
5142    # COLR
5143    #
5144    (
5145        "COLR",
5146        [
5147            ("uint16", "Version", None, None, "Table version number (starts at 0)."),
5148            (
5149                "uint16",
5150                "BaseGlyphRecordCount",
5151                None,
5152                None,
5153                "Number of Base Glyph Records.",
5154            ),
5155            (
5156                "LOffset",
5157                "BaseGlyphRecordArray",
5158                None,
5159                None,
5160                "Offset (from beginning of COLR table) to Base Glyph records.",
5161            ),
5162            (
5163                "LOffset",
5164                "LayerRecordArray",
5165                None,
5166                None,
5167                "Offset (from beginning of COLR table) to Layer Records.",
5168            ),
5169            ("uint16", "LayerRecordCount", None, None, "Number of Layer Records."),
5170            (
5171                "LOffset",
5172                "BaseGlyphList",
5173                None,
5174                "Version >= 1",
5175                "Offset (from beginning of COLR table) to array of Version-1 Base Glyph records.",
5176            ),
5177            (
5178                "LOffset",
5179                "LayerList",
5180                None,
5181                "Version >= 1",
5182                "Offset (from beginning of COLR table) to LayerList.",
5183            ),
5184            (
5185                "LOffset",
5186                "ClipList",
5187                None,
5188                "Version >= 1",
5189                "Offset to ClipList table (may be NULL)",
5190            ),
5191            (
5192                "LOffsetTo(DeltaSetIndexMap)",
5193                "VarIndexMap",
5194                None,
5195                "Version >= 1",
5196                "Offset to DeltaSetIndexMap table (may be NULL)",
5197            ),
5198            (
5199                "LOffset",
5200                "VarStore",
5201                None,
5202                "Version >= 1",
5203                "Offset to variation store (may be NULL)",
5204            ),
5205        ],
5206    ),
5207    (
5208        "BaseGlyphRecordArray",
5209        [
5210            (
5211                "BaseGlyphRecord",
5212                "BaseGlyphRecord",
5213                "BaseGlyphRecordCount",
5214                0,
5215                "Base Glyph records.",
5216            ),
5217        ],
5218    ),
5219    (
5220        "BaseGlyphRecord",
5221        [
5222            (
5223                "GlyphID",
5224                "BaseGlyph",
5225                None,
5226                None,
5227                "Glyph ID of reference glyph. This glyph is for reference only and is not rendered for color.",
5228            ),
5229            (
5230                "uint16",
5231                "FirstLayerIndex",
5232                None,
5233                None,
5234                "Index (from beginning of the Layer Records) to the layer record. There will be numLayers consecutive entries for this base glyph.",
5235            ),
5236            (
5237                "uint16",
5238                "NumLayers",
5239                None,
5240                None,
5241                "Number of color layers associated with this glyph.",
5242            ),
5243        ],
5244    ),
5245    (
5246        "LayerRecordArray",
5247        [
5248            ("LayerRecord", "LayerRecord", "LayerRecordCount", 0, "Layer records."),
5249        ],
5250    ),
5251    (
5252        "LayerRecord",
5253        [
5254            (
5255                "GlyphID",
5256                "LayerGlyph",
5257                None,
5258                None,
5259                "Glyph ID of layer glyph (must be in z-order from bottom to top).",
5260            ),
5261            (
5262                "uint16",
5263                "PaletteIndex",
5264                None,
5265                None,
5266                "Index value to use with a selected color palette.",
5267            ),
5268        ],
5269    ),
5270    (
5271        "BaseGlyphList",
5272        [
5273            (
5274                "uint32",
5275                "BaseGlyphCount",
5276                None,
5277                None,
5278                "Number of Version-1 Base Glyph records",
5279            ),
5280            (
5281                "struct",
5282                "BaseGlyphPaintRecord",
5283                "BaseGlyphCount",
5284                0,
5285                "Array of Version-1 Base Glyph records",
5286            ),
5287        ],
5288    ),
5289    (
5290        "BaseGlyphPaintRecord",
5291        [
5292            ("GlyphID", "BaseGlyph", None, None, "Glyph ID of reference glyph."),
5293            (
5294                "LOffset",
5295                "Paint",
5296                None,
5297                None,
5298                "Offset (from beginning of BaseGlyphPaintRecord) to Paint, typically a PaintColrLayers.",
5299            ),
5300        ],
5301    ),
5302    (
5303        "LayerList",
5304        [
5305            ("uint32", "LayerCount", None, None, "Number of Version-1 Layers"),
5306            (
5307                "LOffset",
5308                "Paint",
5309                "LayerCount",
5310                0,
5311                "Array of offsets to Paint tables, from the start of the LayerList table.",
5312            ),
5313        ],
5314    ),
5315    (
5316        "ClipListFormat1",
5317        [
5318            (
5319                "uint8",
5320                "Format",
5321                None,
5322                None,
5323                "Format for ClipList with 16bit glyph IDs: 1",
5324            ),
5325            ("uint32", "ClipCount", None, None, "Number of Clip records."),
5326            (
5327                "struct",
5328                "ClipRecord",
5329                "ClipCount",
5330                0,
5331                "Array of Clip records sorted by glyph ID.",
5332            ),
5333        ],
5334    ),
5335    (
5336        "ClipRecord",
5337        [
5338            ("uint16", "StartGlyphID", None, None, "First glyph ID in the range."),
5339            ("uint16", "EndGlyphID", None, None, "Last glyph ID in the range."),
5340            ("Offset24", "ClipBox", None, None, "Offset to a ClipBox table."),
5341        ],
5342    ),
5343    (
5344        "ClipBoxFormat1",
5345        [
5346            (
5347                "uint8",
5348                "Format",
5349                None,
5350                None,
5351                "Format for ClipBox without variation: set to 1.",
5352            ),
5353            ("int16", "xMin", None, None, "Minimum x of clip box."),
5354            ("int16", "yMin", None, None, "Minimum y of clip box."),
5355            ("int16", "xMax", None, None, "Maximum x of clip box."),
5356            ("int16", "yMax", None, None, "Maximum y of clip box."),
5357        ],
5358    ),
5359    (
5360        "ClipBoxFormat2",
5361        [
5362            ("uint8", "Format", None, None, "Format for variable ClipBox: set to 2."),
5363            ("int16", "xMin", None, None, "Minimum x of clip box. VarIndexBase + 0."),
5364            ("int16", "yMin", None, None, "Minimum y of clip box. VarIndexBase + 1."),
5365            ("int16", "xMax", None, None, "Maximum x of clip box. VarIndexBase + 2."),
5366            ("int16", "yMax", None, None, "Maximum y of clip box. VarIndexBase + 3."),
5367            (
5368                "VarIndex",
5369                "VarIndexBase",
5370                None,
5371                None,
5372                "Base index into DeltaSetIndexMap.",
5373            ),
5374        ],
5375    ),
5376    # COLRv1 Affine2x3 uses the same column-major order to serialize a 2D
5377    # Affine Transformation as the one used by fontTools.misc.transform.
5378    # However, for historical reasons, the labels 'xy' and 'yx' are swapped.
5379    # Their fundamental meaning is the same though.
5380    # COLRv1 Affine2x3 follows the names found in FreeType and Cairo.
5381    # In all case, the second element in the 6-tuple correspond to the
5382    # y-part of the x basis vector, and the third to the x-part of the y
5383    # basis vector.
5384    # See https://github.com/googlefonts/colr-gradients-spec/pull/85
5385    (
5386        "Affine2x3",
5387        [
5388            ("Fixed", "xx", None, None, "x-part of x basis vector"),
5389            ("Fixed", "yx", None, None, "y-part of x basis vector"),
5390            ("Fixed", "xy", None, None, "x-part of y basis vector"),
5391            ("Fixed", "yy", None, None, "y-part of y basis vector"),
5392            ("Fixed", "dx", None, None, "Translation in x direction"),
5393            ("Fixed", "dy", None, None, "Translation in y direction"),
5394        ],
5395    ),
5396    (
5397        "VarAffine2x3",
5398        [
5399            ("Fixed", "xx", None, None, "x-part of x basis vector. VarIndexBase + 0."),
5400            ("Fixed", "yx", None, None, "y-part of x basis vector. VarIndexBase + 1."),
5401            ("Fixed", "xy", None, None, "x-part of y basis vector. VarIndexBase + 2."),
5402            ("Fixed", "yy", None, None, "y-part of y basis vector. VarIndexBase + 3."),
5403            (
5404                "Fixed",
5405                "dx",
5406                None,
5407                None,
5408                "Translation in x direction. VarIndexBase + 4.",
5409            ),
5410            (
5411                "Fixed",
5412                "dy",
5413                None,
5414                None,
5415                "Translation in y direction. VarIndexBase + 5.",
5416            ),
5417            (
5418                "VarIndex",
5419                "VarIndexBase",
5420                None,
5421                None,
5422                "Base index into DeltaSetIndexMap.",
5423            ),
5424        ],
5425    ),
5426    (
5427        "ColorStop",
5428        [
5429            ("F2Dot14", "StopOffset", None, None, ""),
5430            ("uint16", "PaletteIndex", None, None, "Index for a CPAL palette entry."),
5431            ("F2Dot14", "Alpha", None, None, "Values outsided [0.,1.] reserved"),
5432        ],
5433    ),
5434    (
5435        "VarColorStop",
5436        [
5437            ("F2Dot14", "StopOffset", None, None, "VarIndexBase + 0."),
5438            ("uint16", "PaletteIndex", None, None, "Index for a CPAL palette entry."),
5439            (
5440                "F2Dot14",
5441                "Alpha",
5442                None,
5443                None,
5444                "Values outsided [0.,1.] reserved. VarIndexBase + 1.",
5445            ),
5446            (
5447                "VarIndex",
5448                "VarIndexBase",
5449                None,
5450                None,
5451                "Base index into DeltaSetIndexMap.",
5452            ),
5453        ],
5454    ),
5455    (
5456        "ColorLine",
5457        [
5458            (
5459                "ExtendMode",
5460                "Extend",
5461                None,
5462                None,
5463                "Enum {PAD = 0, REPEAT = 1, REFLECT = 2}",
5464            ),
5465            ("uint16", "StopCount", None, None, "Number of Color stops."),
5466            ("ColorStop", "ColorStop", "StopCount", 0, "Array of Color stops."),
5467        ],
5468    ),
5469    (
5470        "VarColorLine",
5471        [
5472            (
5473                "ExtendMode",
5474                "Extend",
5475                None,
5476                None,
5477                "Enum {PAD = 0, REPEAT = 1, REFLECT = 2}",
5478            ),
5479            ("uint16", "StopCount", None, None, "Number of Color stops."),
5480            ("VarColorStop", "ColorStop", "StopCount", 0, "Array of Color stops."),
5481        ],
5482    ),
5483    # PaintColrLayers
5484    (
5485        "PaintFormat1",
5486        [
5487            ("uint8", "PaintFormat", None, None, "Format identifier-format = 1"),
5488            (
5489                "uint8",
5490                "NumLayers",
5491                None,
5492                None,
5493                "Number of offsets to Paint to read from LayerList.",
5494            ),
5495            ("uint32", "FirstLayerIndex", None, None, "Index into LayerList."),
5496        ],
5497    ),
5498    # PaintSolid
5499    (
5500        "PaintFormat2",
5501        [
5502            ("uint8", "PaintFormat", None, None, "Format identifier-format = 2"),
5503            ("uint16", "PaletteIndex", None, None, "Index for a CPAL palette entry."),
5504            ("F2Dot14", "Alpha", None, None, "Values outsided [0.,1.] reserved"),
5505        ],
5506    ),
5507    # PaintVarSolid
5508    (
5509        "PaintFormat3",
5510        [
5511            ("uint8", "PaintFormat", None, None, "Format identifier-format = 3"),
5512            ("uint16", "PaletteIndex", None, None, "Index for a CPAL palette entry."),
5513            (
5514                "F2Dot14",
5515                "Alpha",
5516                None,
5517                None,
5518                "Values outsided [0.,1.] reserved. VarIndexBase + 0.",
5519            ),
5520            (
5521                "VarIndex",
5522                "VarIndexBase",
5523                None,
5524                None,
5525                "Base index into DeltaSetIndexMap.",
5526            ),
5527        ],
5528    ),
5529    # PaintLinearGradient
5530    (
5531        "PaintFormat4",
5532        [
5533            ("uint8", "PaintFormat", None, None, "Format identifier-format = 4"),
5534            (
5535                "Offset24",
5536                "ColorLine",
5537                None,
5538                None,
5539                "Offset (from beginning of PaintLinearGradient table) to ColorLine subtable.",
5540            ),
5541            ("int16", "x0", None, None, ""),
5542            ("int16", "y0", None, None, ""),
5543            ("int16", "x1", None, None, ""),
5544            ("int16", "y1", None, None, ""),
5545            ("int16", "x2", None, None, ""),
5546            ("int16", "y2", None, None, ""),
5547        ],
5548    ),
5549    # PaintVarLinearGradient
5550    (
5551        "PaintFormat5",
5552        [
5553            ("uint8", "PaintFormat", None, None, "Format identifier-format = 5"),
5554            (
5555                "LOffset24To(VarColorLine)",
5556                "ColorLine",
5557                None,
5558                None,
5559                "Offset (from beginning of PaintVarLinearGradient table) to VarColorLine subtable.",
5560            ),
5561            ("int16", "x0", None, None, "VarIndexBase + 0."),
5562            ("int16", "y0", None, None, "VarIndexBase + 1."),
5563            ("int16", "x1", None, None, "VarIndexBase + 2."),
5564            ("int16", "y1", None, None, "VarIndexBase + 3."),
5565            ("int16", "x2", None, None, "VarIndexBase + 4."),
5566            ("int16", "y2", None, None, "VarIndexBase + 5."),
5567            (
5568                "VarIndex",
5569                "VarIndexBase",
5570                None,
5571                None,
5572                "Base index into DeltaSetIndexMap.",
5573            ),
5574        ],
5575    ),
5576    # PaintRadialGradient
5577    (
5578        "PaintFormat6",
5579        [
5580            ("uint8", "PaintFormat", None, None, "Format identifier-format = 6"),
5581            (
5582                "Offset24",
5583                "ColorLine",
5584                None,
5585                None,
5586                "Offset (from beginning of PaintRadialGradient table) to ColorLine subtable.",
5587            ),
5588            ("int16", "x0", None, None, ""),
5589            ("int16", "y0", None, None, ""),
5590            ("uint16", "r0", None, None, ""),
5591            ("int16", "x1", None, None, ""),
5592            ("int16", "y1", None, None, ""),
5593            ("uint16", "r1", None, None, ""),
5594        ],
5595    ),
5596    # PaintVarRadialGradient
5597    (
5598        "PaintFormat7",
5599        [
5600            ("uint8", "PaintFormat", None, None, "Format identifier-format = 7"),
5601            (
5602                "LOffset24To(VarColorLine)",
5603                "ColorLine",
5604                None,
5605                None,
5606                "Offset (from beginning of PaintVarRadialGradient table) to VarColorLine subtable.",
5607            ),
5608            ("int16", "x0", None, None, "VarIndexBase + 0."),
5609            ("int16", "y0", None, None, "VarIndexBase + 1."),
5610            ("uint16", "r0", None, None, "VarIndexBase + 2."),
5611            ("int16", "x1", None, None, "VarIndexBase + 3."),
5612            ("int16", "y1", None, None, "VarIndexBase + 4."),
5613            ("uint16", "r1", None, None, "VarIndexBase + 5."),
5614            (
5615                "VarIndex",
5616                "VarIndexBase",
5617                None,
5618                None,
5619                "Base index into DeltaSetIndexMap.",
5620            ),
5621        ],
5622    ),
5623    # PaintSweepGradient
5624    (
5625        "PaintFormat8",
5626        [
5627            ("uint8", "PaintFormat", None, None, "Format identifier-format = 8"),
5628            (
5629                "Offset24",
5630                "ColorLine",
5631                None,
5632                None,
5633                "Offset (from beginning of PaintSweepGradient table) to ColorLine subtable.",
5634            ),
5635            ("int16", "centerX", None, None, "Center x coordinate."),
5636            ("int16", "centerY", None, None, "Center y coordinate."),
5637            (
5638                "BiasedAngle",
5639                "startAngle",
5640                None,
5641                None,
5642                "Start of the angular range of the gradient.",
5643            ),
5644            (
5645                "BiasedAngle",
5646                "endAngle",
5647                None,
5648                None,
5649                "End of the angular range of the gradient.",
5650            ),
5651        ],
5652    ),
5653    # PaintVarSweepGradient
5654    (
5655        "PaintFormat9",
5656        [
5657            ("uint8", "PaintFormat", None, None, "Format identifier-format = 9"),
5658            (
5659                "LOffset24To(VarColorLine)",
5660                "ColorLine",
5661                None,
5662                None,
5663                "Offset (from beginning of PaintVarSweepGradient table) to VarColorLine subtable.",
5664            ),
5665            ("int16", "centerX", None, None, "Center x coordinate. VarIndexBase + 0."),
5666            ("int16", "centerY", None, None, "Center y coordinate. VarIndexBase + 1."),
5667            (
5668                "BiasedAngle",
5669                "startAngle",
5670                None,
5671                None,
5672                "Start of the angular range of the gradient. VarIndexBase + 2.",
5673            ),
5674            (
5675                "BiasedAngle",
5676                "endAngle",
5677                None,
5678                None,
5679                "End of the angular range of the gradient. VarIndexBase + 3.",
5680            ),
5681            (
5682                "VarIndex",
5683                "VarIndexBase",
5684                None,
5685                None,
5686                "Base index into DeltaSetIndexMap.",
5687            ),
5688        ],
5689    ),
5690    # PaintGlyph
5691    (
5692        "PaintFormat10",
5693        [
5694            ("uint8", "PaintFormat", None, None, "Format identifier-format = 10"),
5695            (
5696                "Offset24",
5697                "Paint",
5698                None,
5699                None,
5700                "Offset (from beginning of PaintGlyph table) to Paint subtable.",
5701            ),
5702            ("GlyphID", "Glyph", None, None, "Glyph ID for the source outline."),
5703        ],
5704    ),
5705    # PaintColrGlyph
5706    (
5707        "PaintFormat11",
5708        [
5709            ("uint8", "PaintFormat", None, None, "Format identifier-format = 11"),
5710            (
5711                "GlyphID",
5712                "Glyph",
5713                None,
5714                None,
5715                "Virtual glyph ID for a BaseGlyphList base glyph.",
5716            ),
5717        ],
5718    ),
5719    # PaintTransform
5720    (
5721        "PaintFormat12",
5722        [
5723            ("uint8", "PaintFormat", None, None, "Format identifier-format = 12"),
5724            (
5725                "Offset24",
5726                "Paint",
5727                None,
5728                None,
5729                "Offset (from beginning of PaintTransform table) to Paint subtable.",
5730            ),
5731            (
5732                "LOffset24To(Affine2x3)",
5733                "Transform",
5734                None,
5735                None,
5736                "2x3 matrix for 2D affine transformations.",
5737            ),
5738        ],
5739    ),
5740    # PaintVarTransform
5741    (
5742        "PaintFormat13",
5743        [
5744            ("uint8", "PaintFormat", None, None, "Format identifier-format = 13"),
5745            (
5746                "Offset24",
5747                "Paint",
5748                None,
5749                None,
5750                "Offset (from beginning of PaintVarTransform table) to Paint subtable.",
5751            ),
5752            (
5753                "LOffset24To(VarAffine2x3)",
5754                "Transform",
5755                None,
5756                None,
5757                "2x3 matrix for 2D affine transformations.",
5758            ),
5759        ],
5760    ),
5761    # PaintTranslate
5762    (
5763        "PaintFormat14",
5764        [
5765            ("uint8", "PaintFormat", None, None, "Format identifier-format = 14"),
5766            (
5767                "Offset24",
5768                "Paint",
5769                None,
5770                None,
5771                "Offset (from beginning of PaintTranslate table) to Paint subtable.",
5772            ),
5773            ("int16", "dx", None, None, "Translation in x direction."),
5774            ("int16", "dy", None, None, "Translation in y direction."),
5775        ],
5776    ),
5777    # PaintVarTranslate
5778    (
5779        "PaintFormat15",
5780        [
5781            ("uint8", "PaintFormat", None, None, "Format identifier-format = 15"),
5782            (
5783                "Offset24",
5784                "Paint",
5785                None,
5786                None,
5787                "Offset (from beginning of PaintVarTranslate table) to Paint subtable.",
5788            ),
5789            (
5790                "int16",
5791                "dx",
5792                None,
5793                None,
5794                "Translation in x direction. VarIndexBase + 0.",
5795            ),
5796            (
5797                "int16",
5798                "dy",
5799                None,
5800                None,
5801                "Translation in y direction. VarIndexBase + 1.",
5802            ),
5803            (
5804                "VarIndex",
5805                "VarIndexBase",
5806                None,
5807                None,
5808                "Base index into DeltaSetIndexMap.",
5809            ),
5810        ],
5811    ),
5812    # PaintScale
5813    (
5814        "PaintFormat16",
5815        [
5816            ("uint8", "PaintFormat", None, None, "Format identifier-format = 16"),
5817            (
5818                "Offset24",
5819                "Paint",
5820                None,
5821                None,
5822                "Offset (from beginning of PaintScale table) to Paint subtable.",
5823            ),
5824            ("F2Dot14", "scaleX", None, None, ""),
5825            ("F2Dot14", "scaleY", None, None, ""),
5826        ],
5827    ),
5828    # PaintVarScale
5829    (
5830        "PaintFormat17",
5831        [
5832            ("uint8", "PaintFormat", None, None, "Format identifier-format = 17"),
5833            (
5834                "Offset24",
5835                "Paint",
5836                None,
5837                None,
5838                "Offset (from beginning of PaintVarScale table) to Paint subtable.",
5839            ),
5840            ("F2Dot14", "scaleX", None, None, "VarIndexBase + 0."),
5841            ("F2Dot14", "scaleY", None, None, "VarIndexBase + 1."),
5842            (
5843                "VarIndex",
5844                "VarIndexBase",
5845                None,
5846                None,
5847                "Base index into DeltaSetIndexMap.",
5848            ),
5849        ],
5850    ),
5851    # PaintScaleAroundCenter
5852    (
5853        "PaintFormat18",
5854        [
5855            ("uint8", "PaintFormat", None, None, "Format identifier-format = 18"),
5856            (
5857                "Offset24",
5858                "Paint",
5859                None,
5860                None,
5861                "Offset (from beginning of PaintScaleAroundCenter table) to Paint subtable.",
5862            ),
5863            ("F2Dot14", "scaleX", None, None, ""),
5864            ("F2Dot14", "scaleY", None, None, ""),
5865            ("int16", "centerX", None, None, ""),
5866            ("int16", "centerY", None, None, ""),
5867        ],
5868    ),
5869    # PaintVarScaleAroundCenter
5870    (
5871        "PaintFormat19",
5872        [
5873            ("uint8", "PaintFormat", None, None, "Format identifier-format = 19"),
5874            (
5875                "Offset24",
5876                "Paint",
5877                None,
5878                None,
5879                "Offset (from beginning of PaintVarScaleAroundCenter table) to Paint subtable.",
5880            ),
5881            ("F2Dot14", "scaleX", None, None, "VarIndexBase + 0."),
5882            ("F2Dot14", "scaleY", None, None, "VarIndexBase + 1."),
5883            ("int16", "centerX", None, None, "VarIndexBase + 2."),
5884            ("int16", "centerY", None, None, "VarIndexBase + 3."),
5885            (
5886                "VarIndex",
5887                "VarIndexBase",
5888                None,
5889                None,
5890                "Base index into DeltaSetIndexMap.",
5891            ),
5892        ],
5893    ),
5894    # PaintScaleUniform
5895    (
5896        "PaintFormat20",
5897        [
5898            ("uint8", "PaintFormat", None, None, "Format identifier-format = 20"),
5899            (
5900                "Offset24",
5901                "Paint",
5902                None,
5903                None,
5904                "Offset (from beginning of PaintScaleUniform table) to Paint subtable.",
5905            ),
5906            ("F2Dot14", "scale", None, None, ""),
5907        ],
5908    ),
5909    # PaintVarScaleUniform
5910    (
5911        "PaintFormat21",
5912        [
5913            ("uint8", "PaintFormat", None, None, "Format identifier-format = 21"),
5914            (
5915                "Offset24",
5916                "Paint",
5917                None,
5918                None,
5919                "Offset (from beginning of PaintVarScaleUniform table) to Paint subtable.",
5920            ),
5921            ("F2Dot14", "scale", None, None, "VarIndexBase + 0."),
5922            (
5923                "VarIndex",
5924                "VarIndexBase",
5925                None,
5926                None,
5927                "Base index into DeltaSetIndexMap.",
5928            ),
5929        ],
5930    ),
5931    # PaintScaleUniformAroundCenter
5932    (
5933        "PaintFormat22",
5934        [
5935            ("uint8", "PaintFormat", None, None, "Format identifier-format = 22"),
5936            (
5937                "Offset24",
5938                "Paint",
5939                None,
5940                None,
5941                "Offset (from beginning of PaintScaleUniformAroundCenter table) to Paint subtable.",
5942            ),
5943            ("F2Dot14", "scale", None, None, ""),
5944            ("int16", "centerX", None, None, ""),
5945            ("int16", "centerY", None, None, ""),
5946        ],
5947    ),
5948    # PaintVarScaleUniformAroundCenter
5949    (
5950        "PaintFormat23",
5951        [
5952            ("uint8", "PaintFormat", None, None, "Format identifier-format = 23"),
5953            (
5954                "Offset24",
5955                "Paint",
5956                None,
5957                None,
5958                "Offset (from beginning of PaintVarScaleUniformAroundCenter table) to Paint subtable.",
5959            ),
5960            ("F2Dot14", "scale", None, None, "VarIndexBase + 0"),
5961            ("int16", "centerX", None, None, "VarIndexBase + 1"),
5962            ("int16", "centerY", None, None, "VarIndexBase + 2"),
5963            (
5964                "VarIndex",
5965                "VarIndexBase",
5966                None,
5967                None,
5968                "Base index into DeltaSetIndexMap.",
5969            ),
5970        ],
5971    ),
5972    # PaintRotate
5973    (
5974        "PaintFormat24",
5975        [
5976            ("uint8", "PaintFormat", None, None, "Format identifier-format = 24"),
5977            (
5978                "Offset24",
5979                "Paint",
5980                None,
5981                None,
5982                "Offset (from beginning of PaintRotate table) to Paint subtable.",
5983            ),
5984            ("Angle", "angle", None, None, ""),
5985        ],
5986    ),
5987    # PaintVarRotate
5988    (
5989        "PaintFormat25",
5990        [
5991            ("uint8", "PaintFormat", None, None, "Format identifier-format = 25"),
5992            (
5993                "Offset24",
5994                "Paint",
5995                None,
5996                None,
5997                "Offset (from beginning of PaintVarRotate table) to Paint subtable.",
5998            ),
5999            ("Angle", "angle", None, None, "VarIndexBase + 0."),
6000            (
6001                "VarIndex",
6002                "VarIndexBase",
6003                None,
6004                None,
6005                "Base index into DeltaSetIndexMap.",
6006            ),
6007        ],
6008    ),
6009    # PaintRotateAroundCenter
6010    (
6011        "PaintFormat26",
6012        [
6013            ("uint8", "PaintFormat", None, None, "Format identifier-format = 26"),
6014            (
6015                "Offset24",
6016                "Paint",
6017                None,
6018                None,
6019                "Offset (from beginning of PaintRotateAroundCenter table) to Paint subtable.",
6020            ),
6021            ("Angle", "angle", None, None, ""),
6022            ("int16", "centerX", None, None, ""),
6023            ("int16", "centerY", None, None, ""),
6024        ],
6025    ),
6026    # PaintVarRotateAroundCenter
6027    (
6028        "PaintFormat27",
6029        [
6030            ("uint8", "PaintFormat", None, None, "Format identifier-format = 27"),
6031            (
6032                "Offset24",
6033                "Paint",
6034                None,
6035                None,
6036                "Offset (from beginning of PaintVarRotateAroundCenter table) to Paint subtable.",
6037            ),
6038            ("Angle", "angle", None, None, "VarIndexBase + 0."),
6039            ("int16", "centerX", None, None, "VarIndexBase + 1."),
6040            ("int16", "centerY", None, None, "VarIndexBase + 2."),
6041            (
6042                "VarIndex",
6043                "VarIndexBase",
6044                None,
6045                None,
6046                "Base index into DeltaSetIndexMap.",
6047            ),
6048        ],
6049    ),
6050    # PaintSkew
6051    (
6052        "PaintFormat28",
6053        [
6054            ("uint8", "PaintFormat", None, None, "Format identifier-format = 28"),
6055            (
6056                "Offset24",
6057                "Paint",
6058                None,
6059                None,
6060                "Offset (from beginning of PaintSkew table) to Paint subtable.",
6061            ),
6062            ("Angle", "xSkewAngle", None, None, ""),
6063            ("Angle", "ySkewAngle", None, None, ""),
6064        ],
6065    ),
6066    # PaintVarSkew
6067    (
6068        "PaintFormat29",
6069        [
6070            ("uint8", "PaintFormat", None, None, "Format identifier-format = 29"),
6071            (
6072                "Offset24",
6073                "Paint",
6074                None,
6075                None,
6076                "Offset (from beginning of PaintVarSkew table) to Paint subtable.",
6077            ),
6078            ("Angle", "xSkewAngle", None, None, "VarIndexBase + 0."),
6079            ("Angle", "ySkewAngle", None, None, "VarIndexBase + 1."),
6080            (
6081                "VarIndex",
6082                "VarIndexBase",
6083                None,
6084                None,
6085                "Base index into DeltaSetIndexMap.",
6086            ),
6087        ],
6088    ),
6089    # PaintSkewAroundCenter
6090    (
6091        "PaintFormat30",
6092        [
6093            ("uint8", "PaintFormat", None, None, "Format identifier-format = 30"),
6094            (
6095                "Offset24",
6096                "Paint",
6097                None,
6098                None,
6099                "Offset (from beginning of PaintSkewAroundCenter table) to Paint subtable.",
6100            ),
6101            ("Angle", "xSkewAngle", None, None, ""),
6102            ("Angle", "ySkewAngle", None, None, ""),
6103            ("int16", "centerX", None, None, ""),
6104            ("int16", "centerY", None, None, ""),
6105        ],
6106    ),
6107    # PaintVarSkewAroundCenter
6108    (
6109        "PaintFormat31",
6110        [
6111            ("uint8", "PaintFormat", None, None, "Format identifier-format = 31"),
6112            (
6113                "Offset24",
6114                "Paint",
6115                None,
6116                None,
6117                "Offset (from beginning of PaintVarSkewAroundCenter table) to Paint subtable.",
6118            ),
6119            ("Angle", "xSkewAngle", None, None, "VarIndexBase + 0."),
6120            ("Angle", "ySkewAngle", None, None, "VarIndexBase + 1."),
6121            ("int16", "centerX", None, None, "VarIndexBase + 2."),
6122            ("int16", "centerY", None, None, "VarIndexBase + 3."),
6123            (
6124                "VarIndex",
6125                "VarIndexBase",
6126                None,
6127                None,
6128                "Base index into DeltaSetIndexMap.",
6129            ),
6130        ],
6131    ),
6132    # PaintComposite
6133    (
6134        "PaintFormat32",
6135        [
6136            ("uint8", "PaintFormat", None, None, "Format identifier-format = 32"),
6137            (
6138                "LOffset24To(Paint)",
6139                "SourcePaint",
6140                None,
6141                None,
6142                "Offset (from beginning of PaintComposite table) to source Paint subtable.",
6143            ),
6144            (
6145                "CompositeMode",
6146                "CompositeMode",
6147                None,
6148                None,
6149                "A CompositeMode enumeration value.",
6150            ),
6151            (
6152                "LOffset24To(Paint)",
6153                "BackdropPaint",
6154                None,
6155                None,
6156                "Offset (from beginning of PaintComposite table) to backdrop Paint subtable.",
6157            ),
6158        ],
6159    ),
6160    #
6161    # avar
6162    #
6163    (
6164        "AxisValueMap",
6165        [
6166            (
6167                "F2Dot14",
6168                "FromCoordinate",
6169                None,
6170                None,
6171                "A normalized coordinate value obtained using default normalization",
6172            ),
6173            (
6174                "F2Dot14",
6175                "ToCoordinate",
6176                None,
6177                None,
6178                "The modified, normalized coordinate value",
6179            ),
6180        ],
6181    ),
6182    (
6183        "AxisSegmentMap",
6184        [
6185            (
6186                "uint16",
6187                "PositionMapCount",
6188                None,
6189                None,
6190                "The number of correspondence pairs for this axis",
6191            ),
6192            (
6193                "AxisValueMap",
6194                "AxisValueMap",
6195                "PositionMapCount",
6196                0,
6197                "The array of axis value map records for this axis",
6198            ),
6199        ],
6200    ),
6201    (
6202        "avar",
6203        [
6204            (
6205                "Version",
6206                "Version",
6207                None,
6208                None,
6209                "Version of the avar table- 0x00010000 or 0x00020000",
6210            ),
6211            ("uint16", "Reserved", None, None, "Permanently reserved; set to zero"),
6212            (
6213                "uint16",
6214                "AxisCount",
6215                None,
6216                None,
6217                'The number of variation axes for this font. This must be the same number as axisCount in the "fvar" table',
6218            ),
6219            (
6220                "AxisSegmentMap",
6221                "AxisSegmentMap",
6222                "AxisCount",
6223                0,
6224                'The segment maps array — one segment map for each axis, in the order of axes specified in the "fvar" table',
6225            ),
6226            (
6227                "LOffsetTo(DeltaSetIndexMap)",
6228                "VarIdxMap",
6229                None,
6230                "Version >= 0x00020000",
6231                "",
6232            ),
6233            ("LOffset", "VarStore", None, "Version >= 0x00020000", ""),
6234        ],
6235    ),
6236]
6237