]> git.saurik.com Git - apple/icu.git/blame - icuSources/samples/layout/sfnt.h
ICU-66108.tar.gz
[apple/icu.git] / icuSources / samples / layout / sfnt.h
CommitLineData
b75a7d8f 1/*
f3c0d7a5
A
2 ******************************************************************************
3 *
4 * © 2016 and later: Unicode, Inc. and others.
5 * License & terms of use: http://www.unicode.org/copyright.html#License
6 *
7 ******************************************************************************
b75a7d8f
A
8 ****************************************************************************** *
9 *
10 * Copyright (C) 1999-2001, International Business Machines
11 * Corporation and others. All Rights Reserved.
12 *
13 ****************************************************************************** *
14 * file name: sfnt.h
15 *
16 * created on: ??/??/2001
17 * created by: Eric R. Mader
18 */
19
20#ifndef __SFNT_H
21#define __SFNT_H
22
23#include "LETypes.h"
24
25
26#ifndef ANY_NUMBER
27#define ANY_NUMBER 1
28#endif
29
30struct DirectoryEntry
31{
32 le_uint32 tag;
33 le_uint32 checksum;
34 le_uint32 offset;
35 le_uint32 length;
36};
37
38struct SFNTDirectory
39{
40 le_uint32 scalerType;
41 le_uint16 numTables;
42 le_uint16 searchRange;
43 le_uint16 entrySelector;
44 le_uint16 rangeShift;
45 DirectoryEntry tableDirectory[ANY_NUMBER];
46};
47
48
49struct CMAPEncodingSubtableHeader
50{
51 le_uint16 platformID;
52 le_uint16 platformSpecificID;
53 le_uint32 encodingOffset;
54};
55
56struct CMAPTable
57{
58 le_uint16 version;
59 le_uint16 numberSubtables;
60 CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
61};
62
63struct CMAPEncodingSubtable
64{
65 le_uint16 format;
66 le_uint16 length;
67 le_uint16 language;
68};
69
70struct CMAPFormat0Encoding : CMAPEncodingSubtable
71{
72 le_uint8 glyphIndexArray[256];
73};
74
75struct CMAPFormat2Subheader
76{
77 le_uint16 firstCode;
78 le_uint16 entryCount;
79 le_int16 idDelta;
80 le_uint16 idRangeOffset;
81};
82
83struct CMAPFormat2Encoding : CMAPEncodingSubtable
84{
85 le_uint16 subHeadKeys[256];
86 CMAPFormat2Subheader subheaders[ANY_NUMBER];
87};
88
89struct CMAPFormat4Encoding : CMAPEncodingSubtable
90{
91 le_uint16 segCountX2;
92 le_uint16 searchRange;
93 le_uint16 entrySelector;
94 le_uint16 rangeShift;
95 le_uint16 endCodes[ANY_NUMBER];
96// le_uint16 reservedPad;
97// le_uint16 startCodes[ANY_NUMBER];
98// le_uint16 idDelta[ANY_NUMBER];
99// le_uint16 idRangeOffset[ANY_NUMBER];
100// le_uint16 glyphIndexArray[ANY_NUMBER];
101};
102
103struct CMAPFormat6Encoding : CMAPEncodingSubtable
104{
105 le_uint16 firstCode;
106 le_uint16 entryCount;
107 le_uint16 glyphIndexArray[ANY_NUMBER];
108};
109
110struct CMAPEncodingSubtable32
111{
112 le_uint32 format;
113 le_uint32 length;
114 le_uint32 language;
115};
116
117struct CMAPGroup
118{
119 le_uint32 startCharCode;
120 le_uint32 endCharCode;
121 le_uint32 startGlyphCode;
122};
123
124struct CMAPFormat8Encoding : CMAPEncodingSubtable32
125{
126 le_uint32 is32[65536/32];
127 le_uint32 nGroups;
128 CMAPGroup groups[ANY_NUMBER];
129};
130
131struct CMAPFormat10Encoding : CMAPEncodingSubtable32
132{
133 le_uint32 startCharCode;
134 le_uint32 numCharCodes;
135 le_uint16 glyphs[ANY_NUMBER];
136};
137
138struct CMAPFormat12Encoding : CMAPEncodingSubtable32
139{
140 le_uint32 nGroups;
141 CMAPGroup groups[ANY_NUMBER];
142};
143
144typedef le_int32 fixed;
145
146struct BigDate
147{
148 le_uint32 bc;
149 le_uint32 ad;
150};
151
152struct HEADTable
153{
154 fixed version;
155 fixed fontRevision;
156 le_uint32 checksumAdjustment;
157 le_uint32 magicNumber;
158 le_uint16 flags;
159 le_uint16 unitsPerEm;
160 BigDate created;
161 BigDate modified;
162 le_int16 xMin;
163 le_int16 yMin;
164 le_int16 xMax;
165 le_int16 yMax;
166 le_int16 lowestRecPPEM;
167 le_int16 fontDirectionHint;
168 le_int16 indexToLocFormat;
169 le_int16 glyphDataFormat;
170};
171
172struct MAXPTable
173{
174 fixed version;
175 le_uint16 numGlyphs;
176 le_uint16 maxPoints;
177 le_uint16 maxContours;
178 le_uint16 maxComponentPoints;
179 le_uint16 maxComponentContours;
180 le_uint16 maxZones;
181 le_uint16 maxTwilightPoints;
182 le_uint16 maxStorage;
183 le_uint16 maxFunctionDefs;
184 le_uint16 maxInstructionDefs;
185 le_uint16 maxStackElements;
186 le_uint16 maxSizeOfInstructions;
187 le_uint16 maxComponentElements;
188 le_uint16 maxComponentDepth;
189};
190
191struct HHEATable
192{
193 fixed version;
194 le_int16 ascent;
195 le_int16 descent;
196 le_int16 lineGap;
197 le_uint16 advanceWidthMax;
198 le_int16 minLeftSideBearing;
199 le_int16 minRightSideBearing;
200 le_int16 xMaxExtent;
201 le_int16 caretSlopeRise;
202 le_int16 caretSlopeRun;
203 le_int16 caretOffset;
204 le_int16 reserved1;
205 le_int16 reserved2;
206 le_int16 reserved3;
207 le_int16 reserved4;
208 le_int16 metricDataFormat;
209 le_uint16 numOfLongHorMetrics;
210};
211
212struct LongHorMetric
213{
214 le_uint16 advanceWidth;
215 le_int16 leftSideBearing;
216};
217
218struct HMTXTable
219{
220 LongHorMetric hMetrics[ANY_NUMBER]; // ANY_NUMBER = numOfLongHorMetrics from hhea table
221// le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
222};
223
224#endif
225