1 /* Copyright (c) 1997-1998 by Juliusz Chroboczek */
4 typedef unsigned char BYTE;
5 typedef signed char CHAR;
6 typedef unsigned short USHORT;
8 typedef unsigned long ULONG;
11 /* Endianness conversions */
13 #define H(x) ((SHORT)((((SHORT)(x))&0xFF)<<8)+(((USHORT)(x))>>8))
14 #define UH(x) ((USHORT)((((USHORT)(x))&0xFF)<<8)+(((USHORT)(x))>>8))
15 #define L(x) ((LONG)(((LONG)UH((x)&0xFFFF))<<16)+UH(((ULONG)(x))>>16))
16 #define UL(x) ((ULONG)(((ULONG)UH((x)&0xFFFF))<<16)+UH(((ULONG)(x))>>16))
18 #define H(x) ((SHORT)x)
19 #define UH(x) ((USHORT)x)
20 #define L(x) ((LONG)x)
21 #define UL(x) ((ULONG)x)
24 #define FIX_H(x) x=H(x)
25 #define FIX_UH(x) x=UH(x)
26 #define FIX_L(x) x=L(x)
27 #define FIX_UL(x) x=UL(x)
29 /* We are assuming that the compiler will not pad the following
30 * structures; note that their members are intrinsically properly
31 * aligned. This will probably break on some machines. */
39 #define FIX_Fixed(x) {(x).mantissa=H((x).mantissa); (x).fraction=UH((x).fraction);}
46 typedef USHORT uFWord;
48 typedef USHORT F2Dot14;
50 #define MAKE_ULONG(a,b,c,d) ((ULONG)(((ULONG)(a)<<24)|((b)<<16)|((c)<<8)|(d)))
52 /*------------------------------------------------------------*/
62 #define FIX_OffsetTable(x) \
63 {FIX_Fixed((x).version);\
64 FIX_UH((x).numTables);\
65 FIX_UH((x).searchRange);\
66 FIX_UH((x).entrySelector);}
68 struct TableDirectoryEntry
75 #define FIX_TableDirectoryEntry(x) \
76 {FIX_UL((x).tag); FIX_UL((x).checkSum);\
77 FIX_UL((x).offset); FIX_UL((x).length);}
79 /*------------------------------------------------------------*/
85 ULONG checkSumAdjustment;
90 longDateTime modified;
97 SHORT fontDirectionHint;
98 SHORT indexToLocFormat;
99 SHORT glyphDataFormat;
101 #define FIX_HeadTable(x) \
102 {FIX_Fixed((x).version); FIX_Fixed((x).fontRevision);\
103 FIX_UL((x).checkSumAdjustment); FIX_UL((x).magicNumber);\
104 FIX_UH((x).flags); FIX_UH((x).unitsPerEm);\
105 FIX_UH((x).xMin); FIX_UH((x).yMin); FIX_UH((x).xMax); FIX_UH((x).yMax);\
106 FIX_UH((x).macStyle); FIX_UH((x).lowestRecPPEM);\
107 FIX_H((x).fontDirectionHint); FIX_H((x).indexToLocFormat);\
108 FIX_H((x).glyphDataFormat);}
111 /*------------------------------------------------------------*/
122 #define FIX_NameRecord(x) \
123 {FIX_UH((x).platformID); FIX_UH((x).encodingID); FIX_UH((x).languageID);\
124 FIX_UH((x).nameID); FIX_UH((x).length); FIX_UH((x).offset);}
128 /*------------------------------------------------------------*/
134 FWord underlinePosition;
135 FWord underlineThickness;
142 #define FIX_PostTable(x) \
143 {FIX_Fixed((x).formatType); FIX_Fixed((x).italicAngle);\
144 FIX_H((x).underlinePosition); FIX_H((x).underlineThickness);\
145 FIX_UL((x).isFixedPitch);\
146 FIX_UL((x).minMemType42); FIX_UL((x).maxMemType42);\
147 FIX_UL((x).minMemType1); FIX_UL((x).maxMemType1); }
159 /*-----------------------------------------------------------------*/
166 uFWord advanceWidthMax;
167 FWord minLeftSideBearing;
168 FWord minRightSideBearing;
170 SHORT caretSlopeRise;
173 SHORT metricDataFormat;
174 USHORT numberOfHMetrics;
176 #define FIX_HheaTable(x) \
177 {FIX_Fixed((x).version); FIX_H((x).Ascender); FIX_H((x).Descender); FIX_H((x).LineGap);\
178 FIX_UH((x).advanceWidthMax);\
179 FIX_H((x).minLeftSideBearing); FIX_H((x).minRightSideBearing);\
180 FIX_H((x).xMaxExtent); FIX_H((x).caretSlopeRise); FIX_H((x).caretSlopeRun);\
181 FIX_H((x).metricDataFormat); FIX_UH((x).numberOfHMetrics);}
190 #define FIX_Box(x) {FIX_H((x).xMin); FIX_H((x).yMin); FIX_H((x).xMax); FIX_H((x).yMax);}
197 #define FIX_longHorMetric(x) {FIX_UH((x).advanceWidth); FIX_H((x).lsb);}
199 /*------------------------------------------------------------*/
205 #define FIX_KernTable(x) {FIX_UH((x).version); FIX_UH((x).nTables);}
207 struct KernSubTableHeader
213 #define FIX_KernSubTableHeader(x) \
214 {FIX_UH((x).version); FIX_UH((x).length); FIX_UH((x).coverage);}
217 #define kernHorizontal 0x0001
218 #define kernMinimum 0x0002
219 #define kernCrossStream 0x0004
220 #define kernOverride 0x0008
221 #define kernFormat(coverage) ((coverage)>>8)
227 USHORT entrySelector;
231 #define FIX_KernSubTable0(x) \
232 {FIX_UH((x).nPairs); FIX_UH((x).searchRange);\
233 FIX_UH((x).entrySelector); FIX_UH((x).rangeShift);}
241 #define FIX_KernEntry0(x) \
242 {FIX_UH((x).left); FIX_UH((x).right); FIX_H((x).value);}
245 /*------------------------------------------------------------*/
248 struct hashtable_entry
254 struct hashtable_bucket
258 struct hashtable_entry *entries;
264 struct hashtable_bucket **buckets;