1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /***************************************************************************
5 * Copyright (C) 1998-2002, International Business Machines
6 * Corporation and others. All Rights Reserved.
8 ************************************************************************/
11 #ifndef __FONTOBJECT_H
12 #define __FONTOBJECT_H
35 le_uint16 searchRange;
36 le_uint16 entrySelector;
38 DirectoryEntry tableDirectory[ANY_NUMBER];
42 struct CMAPEncodingSubtableHeader
45 le_uint16 platformSpecificID;
46 le_uint32 encodingOffset;
52 le_uint16 numberSubtables;
53 CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
56 struct CMAPEncodingSubtable
63 struct CMAPFormat0Encoding : CMAPEncodingSubtable
65 le_uint8 glyphIndexArray[256];
68 struct CMAPFormat2Subheader
73 le_uint16 idRangeOffset;
76 struct CMAPFormat2Encoding : CMAPEncodingSubtable
78 le_uint16 subHeadKeys[256];
79 CMAPFormat2Subheader subheaders[ANY_NUMBER];
82 struct CMAPFormat4Encoding : CMAPEncodingSubtable
85 le_uint16 searchRange;
86 le_uint16 entrySelector;
88 le_uint16 endCodes[ANY_NUMBER];
89 // le_uint16 reservedPad;
90 // le_uint16 startCodes[ANY_NUMBER];
91 // le_uint16 idDelta[ANY_NUMBER];
92 // le_uint16 idRangeOffset[ANY_NUMBER];
93 // le_uint16 glyphIndexArray[ANY_NUMBER];
96 struct CMAPFormat6Encoding : CMAPEncodingSubtable
100 le_uint16 glyphIndexArray[ANY_NUMBER];
103 typedef le_int32 fixed;
115 le_uint32 checksumAdjustment;
116 le_uint32 magicNumber;
118 le_uint16 unitsPerEm;
125 le_int16 lowestRecPPEM;
126 le_int16 fontDirectionHint;
127 le_int16 indexToLocFormat;
128 le_int16 glyphDataFormat;
136 le_uint16 maxContours;
137 le_uint16 maxComponentPoints;
138 le_uint16 maxComponentContours;
140 le_uint16 maxTwilightPoints;
141 le_uint16 maxStorage;
142 le_uint16 maxFunctionDefs;
143 le_uint16 maxInstructionDefs;
144 le_uint16 maxStackElements;
145 le_uint16 maxSizeOfInstructions;
146 le_uint16 maxComponentElements;
147 le_uint16 maxComponentDepth;
156 le_uint16 advanceWidthMax;
157 le_int16 minLeftSideBearing;
158 le_int16 minRightSideBearing;
160 le_int16 caretSlopeRise;
161 le_int16 caretSlopeRun;
162 le_int16 caretOffset;
167 le_int16 metricDataFormat;
168 le_uint16 numOfLongHorMetrics;
173 le_uint16 advanceWidth;
174 le_int16 leftSideBearing;
179 LongHorMetric hMetrics[ANY_NUMBER]; // ANY_NUMBER = numOfLongHorMetrics from hhea table
180 // le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
186 FontObject(char *fontName);
189 void *readTable(LETag tag, le_uint32 *length);
190 void deleteTable(void *table);
192 LEGlyphID unicodeToGlyph(LEUnicode32 unicode);
195 le_uint32 unicodesToGlyphs(LEUnicode *chars, le_uint32 nChars, LEGlyphID *glyphs,
196 le_uint32 *charIndices, le_bool rightToLeft);
199 le_uint16 getUnitsPerEM();
201 le_uint16 getGlyphAdvance(LEGlyphID glyph);
206 DirectoryEntry *findTable(LETag tag);
207 CMAPEncodingSubtable *findCMAP(le_uint16 platformID, le_uint16 platformSpecificID);
208 void initUnicodeCMAP();
210 SFNTDirectory *directory;
212 le_uint16 searchRange;
213 le_uint16 entrySelector;
214 le_uint16 rangeShift;
216 CMAPTable *cmapTable;
217 le_uint16 cmSegCount;
218 le_uint16 cmSearchRange;
219 le_uint16 cmEntrySelector;
220 le_uint16 cmRangeShift;
221 le_uint16 *cmEndCodes;
222 le_uint16 *cmStartCodes;
223 le_uint16 *cmIdDelta;
224 le_uint16 *cmIdRangeOffset;
226 HEADTable *headTable;
228 HMTXTable *hmtxTable;
230 le_uint16 numOfLongHorMetrics;