1 /***************************************************************************
3 * Copyright (C) 1998-2013, International Business Machines
4 * Corporation and others. All Rights Reserved.
6 ************************************************************************/
10 #define __FONTOBJECT_H
33 le_uint16 searchRange;
34 le_uint16 entrySelector;
36 DirectoryEntry tableDirectory[ANY_NUMBER];
40 struct CMAPEncodingSubtableHeader
43 le_uint16 platformSpecificID;
44 le_uint32 encodingOffset;
50 le_uint16 numberSubtables;
51 CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
54 struct CMAPEncodingSubtable
61 struct CMAPFormat0Encoding : CMAPEncodingSubtable
63 le_uint8 glyphIndexArray[256];
66 struct CMAPFormat2Subheader
71 le_uint16 idRangeOffset;
74 struct CMAPFormat2Encoding : CMAPEncodingSubtable
76 le_uint16 subHeadKeys[256];
77 CMAPFormat2Subheader subheaders[ANY_NUMBER];
80 struct CMAPFormat4Encoding : CMAPEncodingSubtable
83 le_uint16 searchRange;
84 le_uint16 entrySelector;
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];
94 struct CMAPFormat6Encoding : CMAPEncodingSubtable
98 le_uint16 glyphIndexArray[ANY_NUMBER];
101 typedef le_int32 fixed;
113 le_uint32 checksumAdjustment;
114 le_uint32 magicNumber;
116 le_uint16 unitsPerEm;
123 le_int16 lowestRecPPEM;
124 le_int16 fontDirectionHint;
125 le_int16 indexToLocFormat;
126 le_int16 glyphDataFormat;
134 le_uint16 maxContours;
135 le_uint16 maxComponentPoints;
136 le_uint16 maxComponentContours;
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;
154 le_uint16 advanceWidthMax;
155 le_int16 minLeftSideBearing;
156 le_int16 minRightSideBearing;
158 le_int16 caretSlopeRise;
159 le_int16 caretSlopeRun;
160 le_int16 caretOffset;
165 le_int16 metricDataFormat;
166 le_uint16 numOfLongHorMetrics;
171 le_uint16 advanceWidth;
172 le_int16 leftSideBearing;
177 LongHorMetric hMetrics[ANY_NUMBER]; // ANY_NUMBER = numOfLongHorMetrics from hhea table
178 // le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
184 FontObject(char *fontName);
187 void *readTable(LETag tag, le_uint32 *length);
188 void deleteTable(void *table);
190 LEGlyphID unicodeToGlyph(LEUnicode32 unicode);
193 le_uint32 unicodesToGlyphs(LEUnicode *chars, le_uint32 nChars, LEGlyphID *glyphs,
194 le_uint32 *charIndices, le_bool rightToLeft);
197 le_uint16 getUnitsPerEM();
199 le_uint16 getGlyphAdvance(LEGlyphID glyph);
204 DirectoryEntry *findTable(LETag tag);
205 CMAPEncodingSubtable *findCMAP(le_uint16 platformID, le_uint16 platformSpecificID);
206 void initUnicodeCMAP();
208 SFNTDirectory *directory;
210 le_uint16 searchRange;
211 le_uint16 entrySelector;
212 le_uint16 rangeShift;
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;
224 HEADTable *headTable;
226 HMTXTable *hmtxTable;
228 le_uint16 numOfLongHorMetrics;