-
Notifications
You must be signed in to change notification settings - Fork 14
/
opentype.grammar
1964 lines (1906 loc) · 139 KB
/
opentype.grammar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<ufwb version="1.8">
<grammar name="OpenType" start="id:113" author="Andreas Pehnack" email="andreas@synalysis.net" fileextension="otf,ttf" uti="public.opentype-font">
<description>Grammar for OpenType font files</description>
<structure name="OTF file" id="113" encoding="ISO_8859-1:1987" endian="big" signed="no">
<binary name="sfnt version" id="114" length="4">
<fixedvalues>
<fixedvalue name="OTTO" value="4F54544F"/>
</fixedvalues>
</binary>
<number name="numTables" id="115" type="integer" length="2"/>
<number name="searchRange" id="116" type="integer" length="2"/>
<number name="entrySelector" id="117" type="integer" length="2"/>
<number name="rangeShift" id="118" type="integer" length="2"/>
<structure name="TableRecords" id="119" repeat="id:115" repeatmax="-1" order="variable">
<structref name="CMapTableRecord" id="121" repeatmin="0" structure="id:120"/>
<structref name="CompactFontFormatTableRecord" id="123" repeatmin="0" structure="id:122"/>
<structref name="ControlValueProgramTableRecord" id="969" repeatmin="0" structure="id:963"/>
<structref name="ControlValueTableRecord" id="811" repeatmin="0" structure="id:803"/>
<structref name="DigitalSignatureTableRecord" id="125" repeatmin="0" structure="id:124"/>
<structref name="FontHeaderTableRecord" id="127" repeatmin="0" structure="id:126"/>
<structref name="FontProgramTableRecord" id="821" repeatmin="0" structure="id:813"/>
<structref name="GlyfDataTableRecord" id="846" repeatmin="0" structure="id:838"/>
<structref name="GPosTableRecord" id="129" repeatmin="0" structure="id:128"/>
<structref name="GridFittingAndScanConversionProcedureTable" id="831" repeatmin="0" structure="id:823"/>
<structref name="HorizontalDeviceMetricsTableRecord" id="987" repeatmin="0" structure="id:971"/>
<structref name="HorizontalHeaderTableRecord" id="131" repeatmin="0" structure="id:130"/>
<structref name="HorizontalMetricsTableRecord" id="133" repeatmin="0" structure="id:132"/>
<structref name="IndexToLocationTableRecord" id="959" repeatmin="0" structure="id:951"/>
<structref name="KerningTableRecord" id="886" repeatmin="0" structure="id:878"/>
<structref name="LinearThresholdTableRecord" id="135" repeatmin="0" structure="id:134"/>
<structref name="MaximumProfileTableRecord" id="137" repeatmin="0" structure="id:136"/>
<structref name="NamingTableRecord" id="139" repeatmin="0" structure="id:138"/>
<structref name="OS2TableRecord" id="141" repeatmin="0" structure="id:140"/>
<structref name="PostScriptTableRecord" id="143" repeatmin="0" structure="id:142"/>
<structref name="VerticalDeviceMetricsTableRecord" id="145" repeatmin="0" structure="id:144"/>
<structref name="TableRecord" id="147" repeatmin="0" structure="id:146"/>
</structure>
</structure>
<structure name="TableRecord" id="146" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="tag" id="150" fillcolor="57FCD8" type="integer" length="4" display="hex">
<fixedvalues>
<fixedvalue name="CFF " value="0x43464620"/>
<fixedvalue name="DSIG" value="0x44534947"/>
<fixedvalue name="OS/2" value="0x4F532F32"/>
<fixedvalue name="cmap" value="0x636D6170"/>
<fixedvalue name="head" value="0x68656164"/>
<fixedvalue name="hhea" value="0x68686561"/>
<fixedvalue name="hmtx" value="0x686D7478"/>
<fixedvalue name="maxp" value="0x6D617870"/>
<fixedvalue name="name" value="0x6E616D65"/>
<fixedvalue name="post" value="0x706F7374"/>
<fixedvalue name="LTSH" value="0x47535542"/>
</fixedvalues>
</number>
<number name="checkSum" id="151" fillcolor="DE83F7" type="integer" length="4" display="hex"/>
<offset name="offset" id="153" fillcolor="FEFB8C" length="4" references="id:152" referenced-size="id:154" follownullreference="yes"/>
<number name="length" id="154" fillcolor="68D6FB" type="integer" length="4"/>
</structure>
<structure name="CMapTableRecord" id="120" extends="id:146" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="tag" mustmatch="yes" id="156" type="integer" length="4" display="hex">
<fixedvalues>
<fixedvalue name="cmap" value="0x636D6170"/>
</fixedvalues>
</number>
<number name="checkSum" id="157" type="integer" length="4"/>
<offset name="offset" id="159" length="4" references="id:158" referenced-size="id:160"/>
<number name="length" id="160" type="integer" length="4"/>
</structure>
<structure name="ControlValueProgramTableRecord" id="963" extends="id:146">
<number name="tag" mustmatch="yes" id="965" type="integer">
<fixedvalues>
<fixedvalue name="prep" value="0x70726570"/>
</fixedvalues>
</number>
<number name="checkSum" id="966" type="integer"/>
<offset name="offset" id="967" references="id:961" referenced-size="id:968"/>
<number name="length" id="968" type="integer"/>
</structure>
<structure name="ControlValueTableRecord" id="803" extends="id:146">
<number name="tag" mustmatch="yes" id="807" type="integer">
<fixedvalues>
<fixedvalue name="cvt " value="0x63767420"/>
</fixedvalues>
</number>
<number name="checkSum" id="808" type="integer"/>
<offset name="offset" id="809" references="id:805" referenced-size="id:810"/>
<number name="length" id="810" type="integer"/>
</structure>
<structure name="CompactFontFormatTableRecord" id="122" extends="id:146">
<number name="tag" mustmatch="yes" id="162" type="integer">
<fixedvalues>
<fixedvalue name="CFF " value="0x43464620"/>
</fixedvalues>
</number>
<number name="checkSum" id="163" type="integer"/>
<offset name="offset" id="165" references="id:164" referenced-size="id:166"/>
<number name="length" id="166" type="integer"/>
</structure>
<structure name="DigitalSignatureTableRecord" id="124" extends="id:146">
<number name="tag" mustmatch="yes" id="168" type="integer">
<fixedvalues>
<fixedvalue name="DSIG" value="0x44534947"/>
</fixedvalues>
</number>
<number name="checkSum" id="169" type="integer"/>
<offset name="offset" id="171" references="id:170" referenced-size="id:172"/>
<number name="length" id="172" type="integer"/>
</structure>
<structure name="FontHeaderTableRecord" id="126" extends="id:146">
<number name="tag" mustmatch="yes" id="174" type="integer">
<fixedvalues>
<fixedvalue name="head" value="0x68656164"/>
</fixedvalues>
</number>
<number name="checkSum" id="175" type="integer"/>
<offset name="offset" id="177" references="id:176" referenced-size="id:178"/>
<number name="length" id="178" type="integer"/>
</structure>
<structure name="FontProgramTableRecord" id="813" extends="id:146">
<number name="tag" mustmatch="yes" id="817" type="integer">
<fixedvalues>
<fixedvalue name="fpgm" value="0x6670676D"/>
</fixedvalues>
</number>
<number name="checkSum" id="818" type="integer"/>
<offset name="offset" id="819" references="id:815" referenced-size="id:820"/>
<number name="length" id="820" type="integer"/>
</structure>
<structure name="GlyfDataTableRecord" id="838" extends="id:146">
<number name="tag" mustmatch="yes" id="842" type="integer">
<fixedvalues>
<fixedvalue name="glyf" value="0x676C7966"/>
</fixedvalues>
</number>
<number name="checkSum" id="843" type="integer"/>
<offset name="offset" id="844" references="id:840" referenced-size="id:845"/>
<number name="length" id="845" type="integer"/>
</structure>
<structure name="GPosTableRecord" id="128" extends="id:146">
<number name="tag" mustmatch="yes" id="180" type="integer">
<fixedvalues>
<fixedvalue name="GPOS" value="0x47504F53"/>
</fixedvalues>
</number>
<number name="checkSum" id="181" type="integer"/>
<offset name="offset" id="183" references="id:182" referenced-size="id:184"/>
<number name="length" id="184" type="integer"/>
</structure>
<structure name="GridFittingAndScanConversionProcedureTable" id="823" extends="id:146">
<number name="tag" mustmatch="yes" id="827" type="integer">
<fixedvalues>
<fixedvalue name="gasp" value="0x67617370"/>
</fixedvalues>
</number>
<number name="checkSum" id="828" type="integer"/>
<offset name="offset" id="829" references="id:825" referenced-size="id:830"/>
<number name="length" id="830" type="integer"/>
</structure>
<structure name="HorizontalDeviceMetricsTableRecord" id="971" extends="id:146">
<number name="tag" mustmatch="yes" id="975" type="integer">
<fixedvalues>
<fixedvalue name="hdmx" value="0x68646D78"/>
</fixedvalues>
</number>
<number name="checkSum" id="976" type="integer"/>
<offset name="offset" id="977" references="id:973" referenced-size="id:978"/>
<number name="length" id="978" type="integer"/>
</structure>
<structure name="HorizontalHeaderTableRecord" id="130" extends="id:146">
<number name="tag" mustmatch="yes" id="186" type="integer">
<fixedvalues>
<fixedvalue name="hhea" value="0x68686561"/>
</fixedvalues>
</number>
<number name="checkSum" id="187" type="integer"/>
<offset name="offset" id="189" references="id:188" referenced-size="id:190"/>
<number name="length" id="190" type="integer"/>
</structure>
<structure name="HorizontalMetricsTableRecord" id="132" extends="id:146">
<number name="tag" mustmatch="yes" id="192" type="integer">
<fixedvalues>
<fixedvalue name="hmtx" value="0x686D7478"/>
</fixedvalues>
</number>
<number name="checkSum" id="193" type="integer"/>
<offset name="offset" id="195" references="id:194" referenced-size="id:196"/>
<number name="length" id="196" type="integer"/>
</structure>
<structure name="IndexToLocationTableRecord" id="951" extends="id:146">
<number name="tag" mustmatch="yes" id="955" type="integer">
<fixedvalues>
<fixedvalue name="loca" value="0x6C6F6361"/>
</fixedvalues>
</number>
<number name="checkSum" id="956" type="integer"/>
<offset name="offset" id="957" references="id:953" referenced-size="id:958"/>
<number name="length" id="958" type="integer"/>
</structure>
<structure name="KerningTableRecord" id="878" extends="id:146">
<number name="tag" mustmatch="yes" id="882" type="integer">
<fixedvalues>
<fixedvalue name="kern" value="0x6B65726E"/>
</fixedvalues>
</number>
<number name="checkSum" id="883" type="integer"/>
<offset name="offset" id="884" references="id:880" referenced-size="id:885"/>
<number name="length" id="885" type="integer"/>
</structure>
<structure name="LinearThresholdTableRecord" id="134" extends="id:146">
<number name="tag" mustmatch="yes" id="198" type="integer">
<fixedvalues>
<fixedvalue name="LTSH" value="0x4C545348"/>
</fixedvalues>
</number>
<number name="checkSum" id="199" type="integer"/>
<offset name="offset" id="201" references="id:200" referenced-size="id:202"/>
<number name="length" id="202" type="integer"/>
</structure>
<structure name="MaximumProfileTableRecord" id="136" extends="id:146">
<number name="tag" mustmatch="yes" id="204" type="integer">
<fixedvalues>
<fixedvalue name="maxp" value="0x6D617870"/>
</fixedvalues>
</number>
<number name="checkSum" id="205" type="integer"/>
<offset name="offset" id="207" references="id:206" referenced-size="id:208"/>
<number name="length" id="208" type="integer"/>
</structure>
<structure name="NamingTableRecord" id="138" extends="id:146">
<number name="tag" mustmatch="yes" id="210" type="integer">
<fixedvalues>
<fixedvalue name="name" value="0x6E616D65"/>
</fixedvalues>
</number>
<number name="checkSum" id="211" type="integer"/>
<offset name="offset" id="213" references="id:212" referenced-size="id:214"/>
<number name="length" id="214" type="integer"/>
</structure>
<structure name="OS2TableRecord" id="140" extends="id:146">
<number name="tag" mustmatch="yes" id="216" type="integer">
<fixedvalues>
<fixedvalue name="OS/2" value="0x4F532F32"/>
</fixedvalues>
</number>
<number name="checkSum" id="217" type="integer"/>
<offset name="offset" id="219" references="id:218" referenced-size="id:220"/>
<number name="length" id="220" type="integer"/>
</structure>
<structure name="PostScriptTableRecord" id="142" extends="id:146">
<number name="tag" mustmatch="yes" id="222" type="integer">
<fixedvalues>
<fixedvalue name="post" value="0x706F7374"/>
</fixedvalues>
</number>
<number name="checkSum" id="223" type="integer"/>
<offset name="offset" id="225" references="id:224" referenced-size="id:226"/>
<number name="length" id="226" type="integer"/>
</structure>
<structure name="VerticalDeviceMetricsTableRecord" id="144" extends="id:146">
<number name="tag" mustmatch="yes" id="228" type="integer">
<fixedvalues>
<fixedvalue name="VDMX" value="0x56444D58"/>
</fixedvalues>
</number>
<number name="checkSum" id="229" type="integer"/>
<offset name="offset" id="231" references="id:230" referenced-size="id:232"/>
<number name="length" id="232" type="integer"/>
</structure>
<structure name="Table" id="152" encoding="ISO_8859-1:1987" endian="big" signed="no">
<binary name="Non-decodedBinary" id="234" length="remaining"/>
</structure>
<structure name="ShortVersionTable" id="236" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="version" id="237" type="integer" length="2" display="hex"/>
</structure>
<structure name="FixedVersionTable" id="239" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="version" id="240" type="integer" length="4" display="hex"/>
</structure>
<structure name="CharacterToGlyphIndexMappingTable" id="158" extends="id:239" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="version" id="242" type="integer" length="2"/>
<number name="numTables" id="243" type="integer" length="2"/>
<structure name="EncodingRecord" id="244" repeat="id:243" repeatmax="-1">
<number name="platformID" id="245" type="integer" length="2"/>
<number name="encodingID" id="246" type="integer" length="2"/>
<offset name="Subtable" id="248" length="4" references="id:247" relative-to="id:158" follownullreference="yes"/>
</structure>
</structure>
<structure name="CompactFontFormatTable" id="164" extends="id:152">
<description>This table contains a compact representation of a PostScript Type 1, or CIDFont and is structured according to Adobe Technical Note #5176: “The Compact Font Format Specification,” and Adobe Technical Note #5177: “Type 2 Charstring Format.”
Existing TrueType fonts use a glyph index to specify and access glyphs within a font, e.g. to index the loca table and thereby access glyph data in the glyf table. This concept is retained in OpenType™ PostScript fonts except that glyph data is accessed through the CharStrings INDEX of the CFF table</description>
</structure>
<structure name="DigitalSignatureTable" id="170" extends="id:239">
<description>The DSIG table contains the digital signature of the OpenType™ font. Signature formats are widely documented and rely on a key pair architecture. Software developers, or publishers posting material on the Internet, create signatures using a private key. Operating systems or applications authenticate the signature using a public key.
The W3C and major software and operating system developers have specified security standards that describe signature formats, specify secure collections of web objects, and recommend authentication architecture. OpenType fonts with signatures will support these standards.
OpenType fonts offer many security features:
Operating systems and browsing applications can identify the source and integrity of font files before using them,
Font developers can specify embedding restrictions in OpenType fonts, and these restrictions cannot be altered in a font signed by the developer.
The enforcement of signatures is an administrative policy, enabled by the operating system. Windows will soon require installed software components, including fonts, to be signed. Internet browsers will also give users and administrators the ability to screen out unsigned objects obtained on-line, including web pages, fonts, graphics, and software components.
Anyone can obtain identity certificates and encryption keys from a certifying agency, such as Verisign or GTE's Cybertrust, free or at a very low cost</description>
<number name="version" id="253" type="integer">
<description>Version number of the DSIG table (0x00000001)</description>
</number>
<number name="usNumSigs" id="254" type="integer" length="2">
<description>Number of signatures in the table</description>
</number>
<number name="usFlag" id="255" type="integer" length="2">
<description>Permission flags
Permission bit 0 allows a party signing the font to prevent any other parties from also signing the font (counter-signatures). If this bit is set to zero (0) the font may have a signature applied over the existing digital signature(s). A party who wants to ensure that their signature is the last signature can set this bit</description>
<mask name="cannot be resigned" value="0x1">
<fixedvalue name="cannot be resigned" value="0x1"/>
</mask>
<mask name="Reserved" value="0xFE">
<fixedvalue name="Reserved" value="0xFE"/>
</mask>
</number>
<structure name="DSigReference" id="256" repeat="id:254">
<number name="ulFormat" id="257" type="integer" length="4">
<description>Format of the signature
The format identifier specifies both the format of the signature object, as well as the hashing algorithm used to create and authenticate the signature. Currently only one format is defined, but at least one other format will soon be defined to handle subsetting scenarios. Format 1 supports PKCS#7 signatures with X.509 certificates and counter-signatures, as these signatures have been standardized for use by the W3C with the participation of numerous software developers.
For more information about PKCS#7 signatures, see ftp://ftp.rsa.com/pub/pkcs/ascii/pkcs-7.asc
For more information about counter-signatures, see ftp://ftp.rsa.com/pub/pkcs/ascii/pkcs-9.asc
Format 1: For whole fonts, with either TrueType outlines and/or CFF data
PKCS#7 or PKCS#9. The signed content digest is created as follows:
If there is an existing DSIG table in the font,
Remove DSIG table from font.
Remove DSIG table entry from sfnt Table Directory.
Adjust table offsets as necessary.
Zero out the file checksum in the head table.
Add the usFlag (reserved, set at 1 for now) to the stream of bytes
Hash the full stream of bytes using a secure one-way hash (such as MD5) to create the content digest.
Create the PKCS#7 signature block using the content digest.
Create a new DSIG table containing the signature block.
Add the DSIG table to the font, adjusting table offsets as necessary.
Add a DSIG table entry to the sfnt Table Directory.
Recalculate the checksum in the head table.
Prior to signing a font file, ensure that all the following attributes are true.
The magic number in the head table is correct.
Given the number of tables value in the offset table, the other values in the offset table are consistent.
The tags of the tables are ordered alphabetically and there are no duplicate tags.
The offset of each table is a multiple of 4. (That is, tables are long word aligned.)
The first actual table in the file comes immediately after the directory of tables.
If the tables are sorted by offset, then for all tables i (where index 0 means the the table with the smallest offset), Offset[i] + Length[i] <= Offset[i+1] and Offset[i] + Length[i] >= Offset[i+1] - 3. In other words, the tables do not overlap, and there are at most 3 bytes of padding between tables.
The pad bytes between tables are all zeros.
The offset of the last table in the file plus its length is not greater than the size of the file.
The checksums of all tables are correct.
The head table's checkSumAdjustment field is correct</description>
</number>
<number name="ulLength" id="258" type="integer" length="4">
<description>Length of signature in bytes</description>
</number>
<offset name="SignatureBlock" id="260" length="4" references="id:259" referenced-size="id:258" relative-to="id:170" follownullreference="yes"/>
</structure>
</structure>
<structure name="SignatureBlock" id="259" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="usReserved1" id="263" type="integer" length="2">
<description>Reserved for later use; 0 for now</description>
</number>
<number name="usReserved2" id="264" type="integer" length="2">
<description>Reserved for later use; 0 for now</description>
</number>
<number name="cbSignature" id="265" type="integer" length="4">
<description>Length (in bytes) of the PKCS#7 packet in pbSignature</description>
</number>
<binary name="bSignature" id="266" length="cbSignature"/>
</structure>
<structure name="EncodingTable" id="268" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="format" id="269" fillcolor="FEFB8C" type="integer" length="2"/>
</structure>
<structure name="ExtEncodingTable" id="271" length="length" extends="id:268">
<number name="format" id="272" type="integer"/>
<number name="length" id="273" fillcolor="FF7B7A" type="integer" length="2"/>
<number name="language" id="274" fillcolor="FF9130" type="integer" length="2"/>
</structure>
<structure name="Format0EncodingTable" id="276" extends="id:271">
<number name="format" mustmatch="yes" id="277" type="integer">
<fixedvalues>
<fixedvalue name="Format0" value="0"/>
</fixedvalues>
</number>
<number name="length" id="278" type="integer"/>
<number name="language" id="279" type="integer"/>
<number name="glyphIdArray" id="280" fillcolor="FDFA53" repeatmin="256" repeatmax="256" type="integer" length="1"/>
</structure>
<structure name="Format4EncodingTable" id="282" extends="id:271" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="format" mustmatch="yes" id="283" type="integer">
<fixedvalues>
<fixedvalue name="Format4" value="4"/>
</fixedvalues>
</number>
<number name="length" id="284" type="integer"/>
<number name="language" id="285" type="integer"/>
<number name="segCountX2" id="286" type="integer" length="2"/>
<number name="searchRange" id="287" type="integer" length="2"/>
<number name="entrySelector" id="288" type="integer" length="2"/>
<number name="rangeShift" id="289" type="integer" length="2"/>
<number name="endCount" id="290" fillcolor="CEFA8B" repeatmax="segCountX2 / 2" type="integer" length="2"/>
<number name="reservedPad" id="291" type="integer" length="2"/>
<number name="startCount" id="292" fillcolor="68D6FB" repeatmax="segCountX2 / 2" type="integer" length="2"/>
<number name="idDelta" id="293" fillcolor="FF88D3" repeatmax="segCountX2 / 2" type="integer" length="2" signed="yes"/>
<number name="idRangeOffset" id="294" fillcolor="FF3EF5" repeatmax="segCountX2 / 2" type="integer" length="2"/>
<number name="glyphIdArray" id="295" fillcolor="FDFA53" repeatmax="-1" type="integer" length="2"/>
</structure>
<structure name="EncodingTables" id="247" encoding="ISO_8859-1:1987" endian="big" signed="no" order="variable">
<structref name="Format0EncodingTable" id="297" repeatmin="0" structure="id:276"/>
<structref name="Format4EncodingTable" id="298" repeatmin="0" structure="id:282"/>
<structref name="EncodingTable" id="299" repeatmin="0" structure="id:268"/>
</structure>
<structure name="FontHeaderTable" id="176" encoding="ISO_8859-1:1987" endian="big" signed="no">
<description>This table gives global information about the font. The bounding box values should be computed using only glyphs that have contours. Glyphs with no contours should be ignored for the purposes of these calculations</description>
<number name="TableVersionNumber" id="301" type="integer" length="4" display="hex">
<description>0x00010000 for version 1.0</description>
</number>
<number name="fontRevision" id="302" type="integer" length="4" display="hex">
<description>Set by font manufacturer</description>
</number>
<number name="checkSumAdjustment" id="303" type="integer" length="4">
<description>To compute: set it to 0, sum the entire font as ULONG, then store 0xB1B0AFBA - sum</description>
</number>
<number name="magicNumber" id="304" type="integer" length="4" display="hex">
<description>Set to 0x5F0F3CF5</description>
<fixedvalues>
<fixedvalue name="magic" value="0x5F0F3CF5"/>
</fixedvalues>
</number>
<number name="flags" id="305" type="integer" length="2" display="hex">
<mask name="Baseline for font at y=0" value="0x1">
<fixedvalue name="Baseline for font at y=0" value="0x1"/>
</mask>
<mask name="Left sidebearing point at x=0" value="0x2">
<fixedvalue name="Left sidebearing point at x=0" value="0x2"/>
</mask>
<mask name="Instructions may depend on point size" value="0x4">
<fixedvalue name="Instructions may depend on point size" value="0x4"/>
</mask>
<mask name="Force ppem to integer values for all internal scaler math; may use fractional ppem sizes if this bit is clear" value="0x8">
<fixedvalue name="Force ppem to integer values for all internal scaler math; may use fractional ppem sizes if this bit is clear" value="0x8"/>
</mask>
<mask name="Instructions may alter advance width (the advance widths might not scale linearly)" value="0x10">
<fixedvalue name="Instructions may alter advance width (the advance widths might not scale linearly)" value="0x10"/>
</mask>
<mask name="These should be set according to Apple's specification . However, they are not implemented in OpenType" value="0x7E0">
<fixedvalue name="These should be set according to Apple's specification . However, they are not implemented in OpenType" value="0x7E0"/>
</mask>
<mask name="Font data is 'lossless,' as a result of having been compressed and decompressed with the Agfa MicroType Express engine" value="0x800">
<fixedvalue name="Font data is 'lossless,' as a result of having been compressed and decompressed with the Agfa MicroType Express engine" value="0x8000"/>
</mask>
<mask name="Font converted (produce compatible metrics)" value="0x1000">
<fixedvalue name="Font converted (produce compatible metrics)" value="0x10000"/>
</mask>
<mask name="Font optimized for ClearType™. Note, fonts that rely on embedded bitmaps (EBDT) for rendering should not be considered optimized for ClearType, and therefore should keep this bit cleared" value="0x2000">
<fixedvalue name="Font optimized for ClearType™. Note, fonts that rely on embedded bitmaps (EBDT) for rendering should not be considered optimized for ClearType, and therefore should keep this bit cleared" value="0x2000"/>
</mask>
<mask name="Reserved1" value="0x4000">
<fixedvalue name="Reserved" value="0x4000"/>
</mask>
<mask name="Reserved2" value="0x8000">
<fixedvalue name="Reserved2" value="0x8000"/>
</mask>
</number>
<number name="unitsPerEm" id="306" type="integer" length="2">
<description>Valid range is from 16 to 16384. This value should be a power of 2 for fonts that have TrueType outlines</description>
</number>
<number name="created" id="307" type="integer" length="8">
<description>Number of seconds since 12:00 midnight, January 1, 1904. 64-bit integer</description>
</number>
<number name="modified" id="308" type="integer" length="8">
<description>Number of seconds since 12:00 midnight, January 1, 1904. 64-bit integer</description>
</number>
<number name="xMin" id="309" type="integer" length="2" signed="yes">
<description>For all glyph bounding boxes</description>
</number>
<number name="yMin" id="310" type="integer" length="2" signed="yes">
<description>For all glyph bounding boxes</description>
</number>
<number name="xMax" id="311" type="integer" length="2" signed="yes">
<description>For all glyph bounding boxes</description>
</number>
<number name="yMax" id="312" type="integer" length="2" signed="yes">
<description>For all glyph bounding boxes</description>
</number>
<number name="macStyle" id="313" type="integer" length="2">
<mask name="Bold" value="0x1">
<fixedvalue name="Bold" value="0x1"/>
</mask>
<mask name="Italic" value="0x2">
<fixedvalue name="Italic" value="0x2"/>
</mask>
<mask name="Underline" value="0x4">
<fixedvalue name="Underline" value="0x4"/>
</mask>
<mask name="Outline" value="0x8">
<fixedvalue name="Outline" value="0x8"/>
</mask>
<mask name="Shadow" value="0x10">
<fixedvalue name="Shadow" value="0x10"/>
</mask>
<mask name="Condensed" value="0x20">
<fixedvalue name="Condensed" value="0x20"/>
</mask>
<mask name="Extended" value="0x40">
<fixedvalue name="Extended" value="0x40"/>
</mask>
<mask name="Reserved" value="0xFF80">
<fixedvalue name="Reserved" value="0xFF80"/>
</mask>
</number>
<number name="lowestRecPPEM" id="314" type="integer" length="2">
<description>Smallest readable size in pixels</description>
</number>
<number name="fontDirectionHint" id="315" type="integer" length="2" signed="yes">
<description>Deprecated (Set to 2)</description>
<fixedvalues>
<fixedvalue name="Fully mixed directional glyphs" value="0"/>
<fixedvalue name="Only strongly left to right" value="1"/>
<fixedvalue name="Like 1 but also contains neutrals" value="2"/>
<fixedvalue name="Only strongly right to left" value="-1"/>
<fixedvalue name="Like -1 but also contains neutrals" value="-2"/>
</fixedvalues>
</number>
<number name="indexToLocFormat" id="316" type="integer" length="2" signed="yes">
<fixedvalues>
<fixedvalue name="short offsets" value="0"/>
<fixedvalue name="long offsets" value="1"/>
</fixedvalues>
</number>
<number name="glyphDataFormat" id="317" type="integer" length="2" signed="yes">
<fixedvalues>
<fixedvalue name="current format" value="0"/>
</fixedvalues>
</number>
</structure>
<structure name="GPosTable" id="182" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="Version" id="319" type="integer" length="4" display="hex"/>
<offset name="ScriptListTable" id="321" length="2" references="id:320" relative-to="id:182" follownullreference="yes"/>
<offset name="FeatureListTable" id="323" length="2" references="id:322" relative-to="id:182" follownullreference="yes"/>
<offset name="LookupListTable" id="325" length="2" references="id:324" relative-to="id:182" follownullreference="yes"/>
</structure>
<structure name="HorizontalHeaderTable" id="188" extends="id:239" signed="yes">
<number name="Ascender" id="328" type="integer" length="2">
<description>Typographic ascent. (Distance from baseline of highest ascender)</description>
</number>
<number name="Descender" id="329" type="integer" length="2">
<description>Typographic descent. (Distance from baseline of lowest descender)</description>
</number>
<number name="LineGap" id="330" type="integer" length="2">
<description>Typographic line gap.
Negative LineGap values are treated as zero in Windows 3.1, System 6, and System 7</description>
</number>
<number name="advanceWidthMax" id="331" type="integer" length="2" signed="no">
<description>Maximum advance width value in 'hmtx' table</description>
</number>
<number name="minLeftSideBearing" id="332" type="integer" length="2">
<description>Minimum left sidebearing value in 'hmtx' table</description>
</number>
<number name="minRightSideBearing" id="333" type="integer" length="2">
<description>Minimum right sidebearing value; calculated as Min(aw - lsb - (xMax - xMin))</description>
</number>
<number name="xMaxExtent" id="334" type="integer" length="2">
<description>Max(lsb + (xMax - xMin))</description>
</number>
<number name="caretSlopeRise" id="335" type="integer" length="2">
<description>Used to calculate the slope of the cursor (rise/run); 1 for vertical</description>
</number>
<number name="caretSlopeRun" id="336" type="integer" length="2">
<description>0 for vertical</description>
</number>
<number name="caretOffset" id="337" type="integer" length="2">
<description>The amount by which a slanted highlight on a glyph needs to be shifted to produce the best appearance. Set to 0 for non-slanted fonts</description>
</number>
<number name="(reserved)" id="338" repeatmax="4" type="integer" length="2">
<description>set to 0</description>
</number>
<number name="metricDataFormat" id="339" type="integer" length="2">
<description>0 for current format</description>
</number>
<number name="numberOfHMetrics" id="340" type="integer" length="2" signed="no">
<description>Number of hMetric entries in 'hmtx' table</description>
</number>
</structure>
<structure name="HorizontalMetricsTable" id="194" encoding="ISO_8859-1:1987" endian="big" signed="no">
<structure name="longHorMetric" id="342" repeatmax="numberOfHMetrics">
<number name="advanceWidth" id="343" fillcolor="57FCD8" type="integer" length="2"/>
<number name="lsb" id="344" fillcolor="CEFA8B" type="integer" length="2" signed="yes"/>
</structure>
<number name="leftSideBearing" id="346" repeatmax="-1" type="integer" length="2" signed="yes"/>
</structure>
<structure name="MaximumProfileTable" id="206" encoding="ISO_8859-1:1987" endian="big" signed="no" order="variable">
<structref name="MaximumProfileTable05" id="349" repeatmin="0" structure="id:348"/>
<structref name="MaximumProfileTable10" id="351" repeatmin="0" structure="id:350"/>
</structure>
<structure name="MaximumProfileTable05" id="348" extends="id:239">
<number name="version" id="353" type="integer">
<description>0x00005000 for version 0.5
(Note the difference in the representation of a non-zero fractional part, in Fixed numbers.)</description>
<fixedvalues>
<fixedvalue name="version 0.5" value="0x5000"/>
</fixedvalues>
</number>
<number name="numGlyphs" id="354" type="integer" length="2">
<description>The number of glyphs in the font</description>
</number>
</structure>
<structure name="MaximumProfileTable10" id="350" extends="id:348">
<number name="version" mustmatch="yes" id="356" type="integer">
<description>0x00005000 for version 0.5
(Note the difference in the representation of a non-zero fractional part, in Fixed numbers.)</description>
<fixedvalues>
<fixedvalue name="version 1.0" value="0x10000"/>
</fixedvalues>
</number>
<number name="maxPoints" id="358" type="integer" length="2">
<description>Maximum points in a non-composite glyph</description>
</number>
<number name="maxContours" id="359" type="integer" length="2">
<description>Maximum contours in a non-composite glyph</description>
</number>
<number name="maxCompositePoints" id="360" type="integer" length="2">
<description>Maximum points in a composite glyph</description>
</number>
<number name="maxCompositeContours" id="361" type="integer" length="2">
<description>Maximum contours in a composite glyph</description>
</number>
<number name="maxZones" id="362" type="integer" length="2">
<description>should be set to 2 in most cases</description>
<fixedvalues>
<fixedvalue name="instructions do not use the twilight zone (Z0)" value="1"/>
<fixedvalue name="instructions do use Z0" value="2"/>
</fixedvalues>
</number>
<number name="maxTwilightPoints" id="363" type="integer" length="2">
<description>Maximum points used in Z0</description>
</number>
<number name="maxStorage" id="364" type="integer" length="2">
<description>Number of Storage Area locations</description>
</number>
<number name="maxFunctionDefs" id="365" type="integer" length="2">
<description>Number of FDEFs</description>
</number>
<number name="maxInstructionDefs" id="366" type="integer" length="2">
<description>Number of IDEFs</description>
</number>
<number name="maxStackElements" id="367" type="integer" length="2">
<description>Maximum stack depth</description>
</number>
<number name="maxSizeOfInstructions" id="368" type="integer" length="2">
<description>Maximum byte count for glyph instructions</description>
</number>
<number name="maxComponentElements" id="369" type="integer" length="2">
<description>Maximum number of components referenced at “top level” for any composite glyph</description>
</number>
<number name="maxComponentDepth" id="370" type="integer" length="2">
<description>Maximum levels of recursion; 1 for simple components</description>
</number>
</structure>
<structure name="NamingTable" id="212" encoding="ISO_8859-1:1987" endian="big" signed="no" order="variable">
<structref name="NamingTable0" id="373" repeatmin="0" structure="id:372"/>
<structref name="NamingTable1" id="375" repeatmin="0" structure="id:374"/>
</structure>
<structure name="NamingTable0" id="372" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="format" mustmatch="yes" id="377" type="integer" length="2">
<description>Format selector (=0)</description>
<fixedvalues>
<fixedvalue name="Format 0" value="0"/>
</fixedvalues>
</number>
<number name="count" id="378" type="integer" length="2">
<description>Number of name records</description>
</number>
<number name="stringOffset" id="379" type="integer" length="2">
<description>Offset to start of string storage (from start of table)</description>
</number>
<structure name="NameRecord" id="380" length="0" alignment="0" repeat="id:378" repeatmax="-1" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="platformID" id="381" type="integer" length="2"/>
<number name="encodingID" id="382" type="integer" length="2"/>
<number name="languageID" id="383" type="integer" length="2"/>
<number name="nameID" id="384" type="integer" length="2"/>
<number name="length" id="385" type="integer" length="2"/>
<offset name="ReferencedName" id="387" length="2" references="id:386" referenced-size="id:385" relative-to="id:372" additional="stringOffset" follownullreference="yes"/>
</structure>
</structure>
<structure name="NamingTable1" id="374" extends="id:372">
<number name="format" id="390" type="integer">
<description>Format selector (=0)</description>
<fixedvalues>
<fixedvalue name="Format 1" value="1"/>
</fixedvalues>
</number>
<number name="count" id="391" type="integer">
<description>Number of name records</description>
</number>
<structure name="NameRecord" id="392" length="0" alignment="0" repeat="id:391" repeatmax="-1" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="length" id="398" type="integer" length="2"/>
<offset name="ReferencedName" id="399" length="2" references="id:386" referenced-size="id:398" relative-to="id:390" additional="stringOffset" display="decimal"/>
</structure>
<number name="langTagCount" id="401" type="integer" length="2"/>
<structref name="LangTagRecord" id="403" repeatmax="langTagCount" structure="id:402"/>
</structure>
<structure name="NameRecord" id="405" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="platformID" id="406" type="integer" length="2"/>
<number name="encodingID" id="407" type="integer" length="2"/>
<number name="languageID" id="408" type="integer" length="2"/>
<number name="nameID" id="409" type="integer" length="2"/>
<number name="length" id="410" type="integer" length="2"/>
<offset name="ReferencedName" id="411" length="2" references="id:386" referenced-size="id:410" relative-to="id:405" follownullreference="yes"/>
</structure>
<structure name="UnicodeNameRecord" id="413" encoding="ISO_8859-1:1987" endian="big" signed="no"/>
<structure name="LangTagRecord" id="402" encoding="ISO_8859-1:1987" endian="big" signed="no">
<number name="length" id="415" type="integer" length="2">
<description>Language-tag string length (in bytes)</description>
</number>
<number name="offset" id="416" type="integer" length="2">
<description>Language-tag string offset from start of storage area (in bytes)</description>
</number>
</structure>
<structure name="ReferencedName" id="386" encoding="ISO_8859-1:1987" endian="big" signed="no">
<string name="Name" id="418" type="fixed-length" length="remaining"/>
</structure>
<structure name="OS2Table" id="218" extends="id:236" encoding="ISO_8859-1:1987" endian="big" signed="yes">
<number name="version" id="420" type="integer" length="2">
<description>OS/2 table version number
The version number for this OS/2 table.
The version number allows for identification of the precise contents and layout for the OS/2 table. The version number for this layout is four (4). Versions zero (0, TrueType rev 1.5), one (1, TrueType rev 1.66), two (2, OpenType rev 1.2) and three (3, OpenType rev 1.4) have been used previously.
</description>
<fixedvalues>
<fixedvalue name="TrueType rev 1.5" value="0x0"/>
<fixedvalue name="TrueType rev 1.66" value="0x1"/>
<fixedvalue name="TrueType rev 1.2" value="0x2"/>
<fixedvalue name="TrueType rev 1.4" value="0x3"/>
</fixedvalues>
</number>
<number name="xAvgCharWidth" id="421" type="integer" length="2">
<description>Average weighted escapement
The Average Character Width parameter specifies the arithmetic average of the escapement (width) of all non-zero width glyphs in the font.
The value for xAvgCharWidth is calculated by obtaining the arithmetic average of the width of all non-zero width glyphs in the font. Furthermore, it is strongly recommended that implementers do not rely on this value for computing layout for lines of text. Especially, for cases where complex scripts are used.
</description>
</number>
<number name="usWeightClass" id="422" type="integer" length="2" signed="no">
<description>Weight class
Indicates the visual weight (degree of blackness or thickness of strokes) of the characters in the font.
</description>
<fixedvalues>
<fixedvalue name="Thin" value="100"/>
<fixedvalue name="Extra-light (Ultra-light)" value="200"/>
<fixedvalue name="Light" value="300"/>
<fixedvalue name="Normal (Regular)" value="400"/>
<fixedvalue name="Medium" value="500"/>
<fixedvalue name="Semi-bold (Demi-bold)" value="600"/>
<fixedvalue name="Bold" value="700"/>
<fixedvalue name="Extra-bold (Ultra-bold)" value="800"/>
<fixedvalue name="Black (Heavy)" value="900"/>
</fixedvalues>
</number>
<number name="usWidthClass" id="423" type="integer" length="2" signed="no">
<description>Width class
Indicates a relative change from the normal aspect ratio (width to height ratio) as specified by a font designer for the glyphs in a font.
Although every character in a font may have a different numeric aspect ratio, each character in a font of normal width has a relative aspect ratio of one. When a new type style is created of a different width class (either by a font designer or by some automated means) the relative aspect ratio of the characters in the new font is some percentage greater or less than those same characters in the normal font -- it is this difference that this parameter specifies.</description>
</number>
<number name="fsType" id="424" type="integer" length="2" signed="no">
<description>Type flags
Indicates font embedding licensing rights for the font. Embeddable fonts may be stored in a document. When a document with embedded fonts is opened on a system that does not have the font installed (the remote system), the embedded font may be loaded for temporary (and in some cases, permanent) use on that system by an embedding-aware application. Embedding licensing rights are granted by the vendor of the font.
The OpenType Font Embedding DLL Specification and DLL release notes describe the APIs used to implement support for OpenType font embedding and loading. Applications that implement support for font embedding, either through use of the Font Embedding DLL or through other means, must not embed fonts which are not licensed to permit embedding. Further, applications loading embedded fonts for temporary use (see Preview & Print and Editable embedding below) must delete the fonts when the document containing the embedded font is closed.
This version of the OS/2 table makes bits 0 - 3 a set of exclusive bits. In other words, at most one bit in this range may be set at a time. The purpose is to remove misunderstandings caused by previous behavior of using the least restrictive of the bits that are set.
Installable Embedding: No fsType bit is set. Thus fsType is zero.
Fonts with this setting indicate that they may be embedded and permanently installed on the remote system by an application. The user of the remote system acquires the identical rights, obligations and licenses for that font as the original purchaser of the font, and is subject to the same end-user license agreement, copyright, design patent, and/or trademark as was the original purchaser
</description>
<mask name="Restricted License embedding" value="0x2">
<fixedvalue name="Must not be modified, embedded or exchanged" value="0x2"/>
</mask>
<mask name="Preview & Print embedding" value="0x4">
<fixedvalue name="Open read-only" value="0x4"/>
</mask>
<mask name="Editable embedding" value="0x8">
<fixedvalue name="Must only be installed temporarily" value="0x8"/>
</mask>
<mask name="No subsetting" value="0x100">
<fixedvalue name="May not be subsetted" value="0x100"/>
</mask>
<mask name="Bitmap embedding only" value="0x200">
<fixedvalue name="Only bitmaps may be embedded" value="0x200"/>
</mask>
</number>
<number name="ySubscriptXSize" id="425" type="integer" length="2">
<description>Subscript horizontal font size
The recommended horizontal size in font design units for subscripts for this font.
If a font has two recommended sizes for subscripts, e.g., numerics and other, the numeric sizes should be stressed. This size field maps to the em square size of the font being used for a subscript. The horizontal font size specifies a font designer's recommended horizontal font size for subscript characters associated with this font. If a font does not include all of the required subscript characters for an application, and the application can substitute characters by scaling the character of a font or by substituting characters from another font, this parameter specifies the recommended em square for those subscript characters.
For example, if the em square for a font is 2048 and ySubScriptXSize is set to 205, then the horizontal size for a simulated subscript character would be 1/10th the size of the normal character.</description>
</number>
<number name="ySubscriptYSize" id="426" type="integer" length="2">
<description>Subscript vertical font size.
The recommended vertical size in font design units for subscripts for this font.
If a font has two recommended sizes for subscripts, e.g. numerics and other, the numeric sizes should be stressed. This size field maps to the emHeight of the font being used for a subscript. The horizontal font size specifies a font designer's recommendation for horizontal font size of subscript characters associated with this font. If a font does not include all of the required subscript characters for an application, and the application can substitute characters by scaling the characters in a font or by substituting characters from another font, this parameter specifies the recommended horizontal EmInc for those subscript characters.
For example, if the em square for a font is 2048 and ySubScriptYSize is set to 205, then the vertical size for a simulated subscript character would be 1/10th the size of the normal character.
</description>
</number>
<number name="ySubscriptXOffset" id="427" type="integer" length="2">
<description>Subscript x offset.
The recommended horizontal offset in font design untis for subscripts for this font.
The Subscript X Offset parameter specifies a font designer's recommended horizontal offset -- from the character origin of the font to the character origin of the subscript's character -- for subscript characters associated with this font. If a font does not include all of the required subscript characters for an application, and the application can substitute characters, this parameter specifies the recommended horizontal position from the character escapement point of the last character before the first subscript character. For upright characters, this value is usually zero; however, if the characters of a font have an incline (italic characters) the reference point for subscript characters is usually adjusted to compensate for the angle of incline.</description>
</number>
<number name="ySubscriptYOffset" id="428" type="integer" length="2">
<description>Subscript y offset.
The recommended vertical offset in font design units from the baseline for subscripts for this font.
The Subscript Y Offset parameter specifies a font designer's recommended vertical offset from the character baseline to the character baseline for subscript characters associated with this font. Values are expressed as a positive offset below the character baseline. If a font does not include all of the required subscript for an application, this parameter specifies the recommended vertical distance below the character baseline for those subscript characters.</description>
</number>
<number name="ySuperscriptXSize" id="429" type="integer" length="2">
<description>Superscript horizontal font size.
The recommended horizontal size in font design units for superscripts for this font.
If a font has two recommended sizes for subscripts, e.g., numerics and other, the numeric sizes should be stressed. This size field maps to the em square size of the font being used for a subscript. The horizontal font size specifies a font designer's recommended horizontal font size for superscript characters associated with this font. If a font does not include all of the required superscript characters for an application, and the application can substitute characters by scaling the character of a font or by substituting characters from another font, this parameter specifies the recommended em square for those superscript characters.
For example, if the em square for a font is 2048 and ySuperScriptXSize is set to 205, then the horizontal size for a simulated superscript character would be 1/10th the size of the normal character.</description>
</number>
<number name="ySuperscriptYSize" id="430" type="integer" length="2">
<description>Superscript vertical font size.
The recommended vertical size in font design units for superscripts for this font.
If a font has two recommended sizes for subscripts, e.g., numerics and other, the numeric sizes should be stressed. This size field maps to the emHeight of the font being used for a subscript. The vertical font size specifies a font designer's recommended vertical font size for superscript characters associated with this font. If a font does not include all of the required superscript characters for an application, and the application can substitute characters by scaling the character of a font or by substituting characters from another font, this parameter specifies the recommended EmHeight for those superscript characters.
For example, if the em square for a font is 2048 and ySuperScriptYSize is set to 205, then the vertical size for a simulated superscript character would be 1/10th the size of the normal character.</description>
</number>
<number name="ySuperscriptXOffset" id="431" type="integer" length="2">
<description>Superscript x offset.
The recommended horizontal offset in font design units for superscripts for this font.
The Superscript X Offset parameter specifies a font designer's recommended horizontal offset -- from the character origin to the superscript character's origin for the superscript characters associated with this font. If a font does not include all of the required superscript characters for an application, this parameter specifies the recommended horizontal position from the escapement point of the character before the first superscript character. For upright characters, this value is usually zero; however, if the characters of a font have an incline (italic characters) the reference point for superscript characters is usually adjusted to compensate for the angle of incline.
</description>
</number>
<number name="ySuperscriptYOffset" id="432" type="integer" length="2">
<description>Superscript y offset.
The recommended vertical offset in font design units from the baseline for superscripts for this font.
The Superscript Y Offset parameter specifies a font designer's recommended vertical offset -- from the character baseline to the superscript character's baseline associated with this font. Values for this parameter are expressed as a positive offset above the character baseline. If a font does not include all of the required superscript characters for an application, this parameter specifies the recommended vertical distance above the character baseline for those superscript characters.</description>
</number>
<number name="yStrikeoutSize" id="433" type="integer" length="2">
<description>Strikeout size.
Width of the strikeout stroke in font design units.
This field should normally be the width of the em dash for the current font. If the size is one, the strikeout line will be the line represented by the strikeout position field. If the value is two, the strikeout line will be the line represented by the strikeout position and the line immediately above the strikeout position. For a Roman font with a 2048 em square, 102 is suggested.</description>
</number>
<number name="yStrikeoutPosition" id="434" type="integer" length="2">
<description>Strikeout position.
The position of the top of the strikeout stroke relative to the baseline in font design units.
Positive values represent distances above the baseline, while negative values represent distances below the baseline. A value of zero falls directly on the baseline, while a value of one falls one pel above the baseline. The value of strikeout position should not interfere with the recognition of standard characters, and therefore should not line up with crossbars in the font. For a Roman font with a 2048 em square, 460 is suggested.</description>
</number>
<number name="sFamilyClass" id="435" type="integer" length="2">
<description>Font-family class and subclass.
This parameter is a classification of font-family design.
The font class and font subclass are registered values assigned by IBM to each font family. This parameter is intended for use in selecting an alternate font when the requested font is not available. The font class is the most general and the font subclass is the most specific. The high byte of this field contains the family class, while the low byte contains the family subclass.</description>
<fixedvalues>
<fixedvalue name="No Classification" value="0"/>
<fixedvalue name="Oldstyle Serifs" value="1"/>
<fixedvalue name="Transitional Serifs" value="2"/>
<fixedvalue name="Modern Serifs" value="3"/>
<fixedvalue name="Clarendon Serifs" value="4"/>
<fixedvalue name="Slab Serifs" value="5"/>
<fixedvalue name="Freeform Serifs" value="7"/>
<fixedvalue name="Sans Serif" value="8"/>
<fixedvalue name="Ornamentals" value="9"/>
<fixedvalue name="Scripts" value="10"/>
<fixedvalue name="Symbolic" value="12"/>
<fixedvalue name="Reserved" value="13"/>
<fixedvalue name="Reserved" value="14"/>
</fixedvalues>
</number>
<structure name="panose" id="436" signed="no">
<number name="bFamilyType" id="437" type="integer" length="1"/>
<number name="bSerifStyle" id="438" type="integer" length="1"/>
<number name="bWeight" id="439" type="integer" length="1"/>
<number name="bProportion" id="440" type="integer" length="1"/>
<number name="bContrast" id="441" type="integer" length="1"/>
<number name="bStrokeVariation" id="442" type="integer" length="1"/>
<number name="bArmStyle" id="443" type="integer" length="1"/>
<number name="bLetterform" id="444" type="integer" length="1"/>
<number name="bMidline" id="445" type="integer" length="1"/>
<number name="bXHeight" id="446" type="integer" length="1"/>
</structure>
<number name="ulUnicodeRange1" id="448" type="integer" length="4" signed="no" display="hex">
<description>Unicode Character Range
This field is used to specify the Unicode blocks or ranges encompassed by the font file in the 'cmap' subtables for platform 3, encoding ID 1 (Microsoft platform, Unicode) and platform 3, encoding ID 10 (Microsoft platform, UCS-4). If the bit is set (1) then the Unicode range is considered functional. If the bit is clear (0) then the range is not considered functional. Each of the bits is treated as an independent flag and the bits can be set in any combination. The determination of “functional” is left up to the font designer, although character set selection should attempt to be functional by ranges if at all possible.
All reserved fields must be zero. Each long is in Big-Endian form. See ISO/IEC 10646 or the most recent version of the Unicode Standard for the list of Unicode ranges and characters.
</description>
<mask name="Basic Latin" value="0x1">
<fixedvalue name="Basic Latin" value="0x1"/>
</mask>
<mask name="Latin-1 Supplement" value="0x2">
<fixedvalue name="Latin-1 Supplement" value="0x2"/>
</mask>
<mask name="Latin Extended-A" value="0x4">
<fixedvalue name="Latin Extended-A" value="0x4"/>
</mask>
<mask name="Latin Extended-B" value="0x8">
<fixedvalue name="Latin Extended-B" value="0x8"/>
</mask>
<mask name="IPA Extensions" value="0x10">
<fixedvalue name="IPA Extensions" value="0x10"/>
</mask>
<mask name="Spacing Modifier Letters" value="0x20">
<fixedvalue name="Spacing Modifier Letters" value="0x20"/>
</mask>
<mask name="Combining Diacritical Marks" value="0x40">
<fixedvalue name="Combining Diacritical Marks" value="0x40"/>
</mask>
<mask name="Greek and Coptic" value="0x80">
<fixedvalue name="Greek and Coptic" value="0x80"/>
</mask>
<mask name="Coptic" value="0x100">
<fixedvalue name="Coptic" value="0x100"/>
</mask>
<mask name="Cyrillic" value="0x200">
<fixedvalue name="Cyrillic" value="0x200"/>
</mask>
<mask name="Armenian" value="0x400">
<fixedvalue name="Armenian" value="0x400"/>
</mask>
<mask name="Hebrew" value="0x800">
<fixedvalue name="Hebrew" value="0x800"/>
</mask>
<mask name="Vai" value="0x1000">
<fixedvalue name="Vai" value="0x1000"/>
</mask>
<mask name="Arabic" value="0x2000">
<fixedvalue name="Arabic" value="0x2000"/>
</mask>
<mask name="NKo" value="0x4000">
<fixedvalue name="NKo" value="0x4000"/>
</mask>
<mask name="Devanagari" value="0x8000">
<fixedvalue name="Devanagari" value="0x8000"/>
</mask>
<mask name="Bengali" value="0x10000">
<fixedvalue name="Bengali" value="0x10000"/>
</mask>
<mask name="Gurmukhi" value="0x20000">
<fixedvalue name="Gurmukhi" value="0x20000"/>
</mask>
<mask name="Gujarati" value="0x40000">
<fixedvalue name="Gujarati" value="0x40000"/>
</mask>
<mask name="Oriya" value="0x80000">
<fixedvalue name="Oriya" value="0x80000"/>
</mask>
<mask name="Tamil" value="0x100000">
<fixedvalue name="Tamil" value="0x100000"/>
</mask>
<mask name="Telugu" value="0x200000">
<fixedvalue name="Telugu" value="0x200000"/>
</mask>
<mask name="Kannada" value="0x400000">
<fixedvalue name="Kannada" value="0x400000"/>
</mask>
<mask name="Malayalam" value="0x800000">
<fixedvalue name="Malayalam" value="0x800000"/>
</mask>
<mask name="Thai" value="0x1000000">
<fixedvalue name="Thai" value="0x1000000"/>
</mask>
<mask name="Lao" value="0x2000000">
<fixedvalue name="Lao" value="0x2000000"/>
</mask>
<mask name="Georgian" value="0x4000000">
<fixedvalue name="Georgian" value="0x4000000"/>
</mask>
<mask name="Balinese" value="0x8000000">
<fixedvalue name="Balinese" value="0x8000000"/>
</mask>