1 // © 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
;