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