]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/letest/FontObject.h
ICU-511.32.tar.gz
[apple/icu.git] / icuSources / test / letest / FontObject.h
CommitLineData
b75a7d8f
A
1/***************************************************************************
2*
3* Copyright (C) 1998-2002, International Business Machines
4* Corporation and others. All Rights Reserved.
5*
6************************************************************************/
7
8
9#ifndef __FONTOBJECT_H
10#define __FONTOBJECT_H
11
12#include <stdio.h>
13
14#include "LETypes.h"
15
16
17#ifndef ANY_NUMBER
18#define ANY_NUMBER 1
19#endif
20
21struct DirectoryEntry
22{
23 le_uint32 tag;
24 le_uint32 checksum;
25 le_uint32 offset;
26 le_uint32 length;
27};
28
29struct SFNTDirectory
30{
31 le_uint32 scalerType;
32 le_uint16 numTables;
33 le_uint16 searchRange;
34 le_uint16 entrySelector;
35 le_uint16 rangeShift;
36 DirectoryEntry tableDirectory[ANY_NUMBER];
37};
38
39
40struct CMAPEncodingSubtableHeader
41{
42 le_uint16 platformID;
43 le_uint16 platformSpecificID;
44 le_uint32 encodingOffset;
45};
46
47struct CMAPTable
48{
49 le_uint16 version;
50 le_uint16 numberSubtables;
51 CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
52};
53
54struct CMAPEncodingSubtable
55{
56 le_uint16 format;
57 le_uint16 length;
58 le_uint16 language;
59};
60
61struct CMAPFormat0Encoding : CMAPEncodingSubtable
62{
63 le_uint8 glyphIndexArray[256];
64};
65
66struct CMAPFormat2Subheader
67{
68 le_uint16 firstCode;
69 le_uint16 entryCount;
70 le_int16 idDelta;
71 le_uint16 idRangeOffset;
72};
73
74struct CMAPFormat2Encoding : CMAPEncodingSubtable
75{
76 le_uint16 subHeadKeys[256];
77 CMAPFormat2Subheader subheaders[ANY_NUMBER];
78};
79
80struct CMAPFormat4Encoding : CMAPEncodingSubtable
81{
82 le_uint16 segCountX2;
83 le_uint16 searchRange;
84 le_uint16 entrySelector;
85 le_uint16 rangeShift;
86 le_uint16 endCodes[ANY_NUMBER];
87// le_uint16 reservedPad;
88// le_uint16 startCodes[ANY_NUMBER];
89// le_uint16 idDelta[ANY_NUMBER];
90// le_uint16 idRangeOffset[ANY_NUMBER];
91// le_uint16 glyphIndexArray[ANY_NUMBER];
92};
93
94struct CMAPFormat6Encoding : CMAPEncodingSubtable
95{
96 le_uint16 firstCode;
97 le_uint16 entryCount;
98 le_uint16 glyphIndexArray[ANY_NUMBER];
99};
100
101typedef le_int32 fixed;
102
103struct BigDate
104{
105 le_uint32 bc;
106 le_uint32 ad;
107};
108
109struct HEADTable
110{
111 fixed version;
112 fixed fontRevision;
113 le_uint32 checksumAdjustment;
114 le_uint32 magicNumber;
115 le_uint16 flags;
116 le_uint16 unitsPerEm;
117 BigDate created;
118 BigDate modified;
119 le_int16 xMin;
120 le_int16 yMin;
121 le_int16 xMax;
122 le_int16 yMax;
123 le_int16 lowestRecPPEM;
124 le_int16 fontDirectionHint;
125 le_int16 indexToLocFormat;
126 le_int16 glyphDataFormat;
127};
128
129struct MAXPTable
130{
131 fixed version;
132 le_uint16 numGlyphs;
133 le_uint16 maxPoints;
134 le_uint16 maxContours;
135 le_uint16 maxComponentPoints;
136 le_uint16 maxComponentContours;
137 le_uint16 maxZones;
138 le_uint16 maxTwilightPoints;
139 le_uint16 maxStorage;
140 le_uint16 maxFunctionDefs;
141 le_uint16 maxInstructionDefs;
142 le_uint16 maxStackElements;
143 le_uint16 maxSizeOfInstructions;
144 le_uint16 maxComponentElements;
145 le_uint16 maxComponentDepth;
146};
147
148struct HHEATable
149{
150 fixed version;
151 le_int16 ascent;
152 le_int16 descent;
153 le_int16 lineGap;
154 le_uint16 advanceWidthMax;
155 le_int16 minLeftSideBearing;
156 le_int16 minRightSideBearing;
157 le_int16 xMaxExtent;
158 le_int16 caretSlopeRise;
159 le_int16 caretSlopeRun;
160 le_int16 caretOffset;
161 le_int16 reserved1;
162 le_int16 reserved2;
163 le_int16 reserved3;
164 le_int16 reserved4;
165 le_int16 metricDataFormat;
166 le_uint16 numOfLongHorMetrics;
167};
168
169struct LongHorMetric
170{
171 le_uint16 advanceWidth;
172 le_int16 leftSideBearing;
173};
174
175struct HMTXTable
176{
177 LongHorMetric hMetrics[ANY_NUMBER]; // ANY_NUMBER = numOfLongHorMetrics from hhea table
178// le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
179};
180
181class FontObject
182{
183public:
184 FontObject(char *fontName);
185 ~FontObject();
186
187 void *readTable(LETag tag, le_uint32 *length);
188 void deleteTable(void *table);
189
190 LEGlyphID unicodeToGlyph(LEUnicode32 unicode);
191
192#if 0
193 le_uint32 unicodesToGlyphs(LEUnicode *chars, le_uint32 nChars, LEGlyphID *glyphs,
194 le_uint32 *charIndices, le_bool rightToLeft);
195#endif
196
197 le_uint16 getUnitsPerEM();
198
199 le_uint16 getGlyphAdvance(LEGlyphID glyph);
200
201private:
202 FontObject();
203
204 DirectoryEntry *findTable(LETag tag);
205 CMAPEncodingSubtable *findCMAP(le_uint16 platformID, le_uint16 platformSpecificID);
206 void initUnicodeCMAP();
207
208 SFNTDirectory *directory;
209 le_uint16 numTables;
210 le_uint16 searchRange;
211 le_uint16 entrySelector;
212 le_uint16 rangeShift;
213
214 CMAPTable *cmapTable;
215 le_uint16 cmSegCount;
216 le_uint16 cmSearchRange;
217 le_uint16 cmEntrySelector;
218 le_uint16 cmRangeShift;
219 le_uint16 *cmEndCodes;
220 le_uint16 *cmStartCodes;
221 le_uint16 *cmIdDelta;
222 le_uint16 *cmIdRangeOffset;
223
224 HEADTable *headTable;
225
226 HMTXTable *hmtxTable;
227 le_uint16 numGlyphs;
228 le_uint16 numOfLongHorMetrics;
229
230 FILE *file;
231
232};
233
234#endif
235