• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  ******************************************************************************
3  *
4  *   © 2016 and later: Unicode, Inc. and others.
5  *   License & terms of use: http://www.unicode.org/copyright.html
6  *
7  ******************************************************************************
8  ****************************************************************************** *
9  *
10  *   Copyright (C) 1999-2001, International Business Machines
11  *   Corporation and others.  All Rights Reserved.
12  *
13  ****************************************************************************** *
14  *   file name:  sfnt.h
15  *
16  *   created on: ??/??/2001
17  *   created by: Eric R. Mader
18  */
19 
20 #ifndef __SFNT_H
21 #define __SFNT_H
22 
23 #include "LETypes.h"
24 
25 
26 #ifndef ANY_NUMBER
27 #define ANY_NUMBER 1
28 #endif
29 
30 struct DirectoryEntry
31 {
32     le_uint32   tag;
33     le_uint32   checksum;
34     le_uint32   offset;
35     le_uint32   length;
36 };
37 
38 struct SFNTDirectory
39 {
40     le_uint32       scalerType;
41     le_uint16       numTables;
42     le_uint16       searchRange;
43     le_uint16       entrySelector;
44     le_uint16       rangeShift;
45     DirectoryEntry  tableDirectory[ANY_NUMBER];
46 };
47 
48 
49 struct CMAPEncodingSubtableHeader
50 {
51     le_uint16   platformID;
52     le_uint16   platformSpecificID;
53     le_uint32   encodingOffset;
54 };
55 
56 struct CMAPTable
57 {
58     le_uint16   version;
59     le_uint16   numberSubtables;
60     CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
61 };
62 
63 struct CMAPEncodingSubtable
64 {
65     le_uint16   format;
66     le_uint16   length;
67     le_uint16   language;
68 };
69 
70 struct CMAPFormat0Encoding : CMAPEncodingSubtable
71 {
72     le_uint8    glyphIndexArray[256];
73 };
74 
75 struct CMAPFormat2Subheader
76 {
77     le_uint16   firstCode;
78     le_uint16   entryCount;
79     le_int16    idDelta;
80     le_uint16   idRangeOffset;
81 };
82 
83 struct CMAPFormat2Encoding : CMAPEncodingSubtable
84 {
85     le_uint16  subHeadKeys[256];
86     CMAPFormat2Subheader subheaders[ANY_NUMBER];
87 };
88 
89 struct CMAPFormat4Encoding : CMAPEncodingSubtable
90 {
91     le_uint16   segCountX2;
92     le_uint16   searchRange;
93     le_uint16   entrySelector;
94     le_uint16   rangeShift;
95     le_uint16   endCodes[ANY_NUMBER];
96 //  le_uint16   reservedPad;
97 //  le_uint16   startCodes[ANY_NUMBER];
98 //  le_uint16   idDelta[ANY_NUMBER];
99 //  le_uint16   idRangeOffset[ANY_NUMBER];
100 //  le_uint16   glyphIndexArray[ANY_NUMBER];
101 };
102 
103 struct CMAPFormat6Encoding : CMAPEncodingSubtable
104 {
105     le_uint16   firstCode;
106     le_uint16   entryCount;
107     le_uint16   glyphIndexArray[ANY_NUMBER];
108 };
109 
110 struct CMAPEncodingSubtable32
111 {
112     le_uint32   format;
113     le_uint32   length;
114     le_uint32   language;
115 };
116 
117 struct CMAPGroup
118 {
119     le_uint32   startCharCode;
120     le_uint32   endCharCode;
121     le_uint32   startGlyphCode;
122 };
123 
124 struct CMAPFormat8Encoding : CMAPEncodingSubtable32
125 {
126     le_uint32   is32[65536/32];
127     le_uint32   nGroups;
128     CMAPGroup   groups[ANY_NUMBER];
129 };
130 
131 struct CMAPFormat10Encoding : CMAPEncodingSubtable32
132 {
133     le_uint32   startCharCode;
134     le_uint32   numCharCodes;
135     le_uint16   glyphs[ANY_NUMBER];
136 };
137 
138 struct CMAPFormat12Encoding : CMAPEncodingSubtable32
139 {
140     le_uint32   nGroups;
141     CMAPGroup   groups[ANY_NUMBER];
142 };
143 
144 typedef le_int32 fixed;
145 
146 struct BigDate
147 {
148     le_uint32   bc;
149     le_uint32   ad;
150 };
151 
152 struct HEADTable
153 {
154     fixed       version;
155     fixed       fontRevision;
156     le_uint32   checksumAdjustment;
157     le_uint32   magicNumber;
158     le_uint16   flags;
159     le_uint16   unitsPerEm;
160     BigDate     created;
161     BigDate     modified;
162     le_int16    xMin;
163     le_int16    yMin;
164     le_int16    xMax;
165     le_int16    yMax;
166     le_int16    lowestRecPPEM;
167     le_int16    fontDirectionHint;
168     le_int16    indexToLocFormat;
169     le_int16    glyphDataFormat;
170 };
171 
172 struct MAXPTable
173 {
174     fixed       version;
175     le_uint16   numGlyphs;
176     le_uint16   maxPoints;
177     le_uint16   maxContours;
178     le_uint16   maxComponentPoints;
179     le_uint16   maxComponentContours;
180     le_uint16   maxZones;
181     le_uint16   maxTwilightPoints;
182     le_uint16   maxStorage;
183     le_uint16   maxFunctionDefs;
184     le_uint16   maxInstructionDefs;
185     le_uint16   maxStackElements;
186     le_uint16   maxSizeOfInstructions;
187     le_uint16   maxComponentElements;
188     le_uint16   maxComponentDepth;
189 };
190 
191 struct HHEATable
192 {
193     fixed       version;
194     le_int16    ascent;
195     le_int16    descent;
196     le_int16    lineGap;
197     le_uint16   advanceWidthMax;
198     le_int16    minLeftSideBearing;
199     le_int16    minRightSideBearing;
200     le_int16    xMaxExtent;
201     le_int16    caretSlopeRise;
202     le_int16    caretSlopeRun;
203     le_int16    caretOffset;
204     le_int16    reserved1;
205     le_int16    reserved2;
206     le_int16    reserved3;
207     le_int16    reserved4;
208     le_int16    metricDataFormat;
209     le_uint16   numOfLongHorMetrics;
210 };
211 
212 struct LongHorMetric
213 {
214     le_uint16   advanceWidth;
215     le_int16    leftSideBearing;
216 };
217 
218 struct HMTXTable
219 {
220     LongHorMetric hMetrics[ANY_NUMBER];        // ANY_NUMBER = numOfLongHorMetrics from hhea table
221 //  le_int16      leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
222 };
223 
224 #endif
225 
226