]> git.saurik.com Git - apple/icu.git/blob - icuSources/layout/MorphTables.h
ICU-511.32.tar.gz
[apple/icu.git] / icuSources / layout / MorphTables.h
1 /*
2 *
3 * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved
4 *
5 */
6
7 #ifndef __MORPHTABLES_H
8 #define __MORPHTABLES_H
9
10 /**
11 * \file
12 * \internal
13 */
14
15 #include "LETypes.h"
16 #include "LayoutTables.h"
17
18 U_NAMESPACE_BEGIN
19
20 class LEGlyphStorage;
21
22 typedef le_uint32 FeatureFlags;
23
24 typedef le_int16 FeatureType;
25 typedef le_int16 FeatureSetting;
26
27 struct FeatureTableEntry
28 {
29 FeatureType featureType;
30 FeatureSetting featureSetting;
31 FeatureFlags enableFlags;
32 FeatureFlags disableFlags;
33 };
34
35 struct ChainHeader
36 {
37 FeatureFlags defaultFlags;
38 le_uint32 chainLength;
39 le_int16 nFeatureEntries;
40 le_int16 nSubtables;
41 FeatureTableEntry featureTable[ANY_NUMBER];
42 };
43
44 struct MorphTableHeader
45 {
46 le_int32 version;
47 le_uint32 nChains;
48 ChainHeader chains[ANY_NUMBER];
49
50 void process(LEGlyphStorage &glyphStorage) const;
51 };
52
53 typedef le_int16 SubtableCoverage;
54 typedef le_uint32 SubtableCoverage2;
55
56 enum SubtableCoverageFlags
57 {
58 scfVertical = 0x8000,
59 scfReverse = 0x4000,
60 scfIgnoreVt = 0x2000,
61 scfReserved = 0x1FF8,
62 scfTypeMask = 0x0007
63 };
64
65 enum MorphSubtableType
66 {
67 mstIndicRearrangement = 0,
68 mstContextualGlyphSubstitution = 1,
69 mstLigatureSubstitution = 2,
70 mstReservedUnused = 3,
71 mstNonContextualGlyphSubstitution = 4,
72 mstContextualGlyphInsertion = 5
73 };
74
75 struct MorphSubtableHeader
76 {
77 le_int16 length;
78 SubtableCoverage coverage;
79 FeatureFlags subtableFeatures;
80
81 void process(LEGlyphStorage &glyphStorage) const;
82 };
83
84 enum SubtableCoverageFlags2
85 {
86 scfVertical2 = 0x80000000,
87 scfReverse2 = 0x40000000,
88 scfIgnoreVt2 = 0x20000000,
89 scfReserved2 = 0x1FFFFF00,
90 scfTypeMask2 = 0x000000FF
91 };
92
93 struct MorphSubtableHeader2
94 {
95 le_uint32 length;
96 SubtableCoverage2 coverage;
97 FeatureFlags subtableFeatures;
98
99 void process(LEGlyphStorage &glyphStorage) const;
100 };
101
102 struct ChainHeader2
103 {
104 FeatureFlags defaultFlags;
105 le_uint32 chainLength;
106 le_uint32 nFeatureEntries;
107 le_uint32 nSubtables;
108 FeatureTableEntry featureTable[ANY_NUMBER];
109 };
110
111 struct MorphTableHeader2
112 {
113 le_int32 version;
114 le_uint32 nChains;
115 ChainHeader2 chains[ANY_NUMBER];
116
117 void process(LEGlyphStorage &glyphStorage, le_int32 typoFlags) const;
118 };
119
120 /*
121 * AAT Font Features
122 * source: https://developer.apple.com/fonts/registry/
123 * (plus addition from ATS/SFNTLayoutTypes.h)
124 */
125
126 enum {
127
128 allTypographicFeaturesType = 0,
129
130 allTypeFeaturesOnSelector = 0,
131 allTypeFeaturesOffSelector = 1,
132
133 ligaturesType = 1,
134
135 requiredLigaturesOnSelector = 0,
136 requiredLigaturesOffSelector = 1,
137 commonLigaturesOnSelector = 2,
138 commonLigaturesOffSelector = 3,
139 rareLigaturesOnSelector = 4,
140 rareLigaturesOffSelector = 5,
141 logosOnSelector = 6,
142 logosOffSelector = 7,
143 rebusPicturesOnSelector = 8,
144 rebusPicturesOffSelector = 9,
145 diphthongLigaturesOnSelector = 10,
146 diphthongLigaturesOffSelector = 11,
147 squaredLigaturesOnSelector = 12,
148 squaredLigaturesOffSelector = 13,
149 abbrevSquaredLigaturesOnSelector = 14,
150 abbrevSquaredLigaturesOffSelector = 15,
151 symbolLigaturesOnSelector = 16,
152 symbolLigaturesOffSelector = 17,
153 contextualLigaturesOnSelector = 18,
154 contextualLigaturesOffSelector = 19,
155 historicalLigaturesOnSelector = 20,
156 historicalLigaturesOffSelector = 21,
157
158 cursiveConnectionType = 2,
159
160 unconnectedSelector = 0,
161 partiallyConnectedSelector = 1,
162 cursiveSelector = 2,
163
164 letterCaseType = 3,
165
166 upperAndLowerCaseSelector = 0,
167 allCapsSelector = 1,
168 allLowerCaseSelector = 2,
169 smallCapsSelector = 3,
170 initialCapsSelector = 4,
171 initialCapsAndSmallCapsSelector = 5,
172
173 verticalSubstitutionType = 4,
174
175 substituteVerticalFormsOnSelector = 0,
176 substituteVerticalFormsOffSelector = 1,
177
178 linguisticRearrangementType = 5,
179
180 linguisticRearrangementOnSelector = 0,
181 linguisticRearrangementOffSelector = 1,
182
183 numberSpacingType = 6,
184
185 monospacedNumbersSelector = 0,
186 proportionalNumbersSelector = 1,
187
188 /*
189 appleReserved1Type = 7,
190 */
191
192 smartSwashType = 8,
193
194 wordInitialSwashesOnSelector = 0,
195 wordInitialSwashesOffSelector = 1,
196 wordFinalSwashesOnSelector = 2,
197 wordFinalSwashesOffSelector = 3,
198 lineInitialSwashesOnSelector = 4,
199 lineInitialSwashesOffSelector = 5,
200 lineFinalSwashesOnSelector = 6,
201 lineFinalSwashesOffSelector = 7,
202 nonFinalSwashesOnSelector = 8,
203 nonFinalSwashesOffSelector = 9,
204
205 diacriticsType = 9,
206
207 showDiacriticsSelector = 0,
208 hideDiacriticsSelector = 1,
209 decomposeDiacriticsSelector = 2,
210
211 verticalPositionType = 10,
212
213 normalPositionSelector = 0,
214 superiorsSelector = 1,
215 inferiorsSelector = 2,
216 ordinalsSelector = 3,
217
218 fractionsType = 11,
219
220 noFractionsSelector = 0,
221 verticalFractionsSelector = 1,
222 diagonalFractionsSelector = 2,
223
224 /*
225 appleReserved2Type = 12,
226 */
227
228 overlappingCharactersType = 13,
229
230 preventOverlapOnSelector = 0,
231 preventOverlapOffSelector = 1,
232
233 typographicExtrasType = 14,
234
235 hyphensToEmDashOnSelector = 0,
236 hyphensToEmDashOffSelector = 1,
237 hyphenToEnDashOnSelector = 2,
238 hyphenToEnDashOffSelector = 3,
239 unslashedZeroOnSelector = 4,
240 slashedZeroOffSelector = 4,
241 unslashedZeroOffSelector = 5,
242 slashedZeroOnSelector = 5,
243 formInterrobangOnSelector = 6,
244 formInterrobangOffSelector = 7,
245 smartQuotesOnSelector = 8,
246 smartQuotesOffSelector = 9,
247 periodsToEllipsisOnSelector = 10,
248 periodsToEllipsisOffSelector = 11,
249
250 mathematicalExtrasType = 15,
251
252 hyphenToMinusOnSelector = 0,
253 hyphenToMinusOffSelector = 1,
254 asteriskToMultiplyOnSelector = 2,
255 asteriskToMultiplyOffSelector = 3,
256 slashToDivideOnSelector = 4,
257 slashToDivideOffSelector = 5,
258 inequalityLigaturesOnSelector = 6,
259 inequalityLigaturesOffSelector = 7,
260 exponentsOnSelector = 8,
261 exponentsOffSelector = 9,
262
263 ornamentSetsType = 16,
264
265 noOrnamentsSelector = 0,
266 dingbatsSelector = 1,
267 piCharactersSelector = 2,
268 fleuronsSelector = 3,
269 decorativeBordersSelector = 4,
270 internationalSymbolsSelector = 5,
271 mathSymbolsSelector = 6,
272
273 characterAlternativesType = 17,
274
275 noAlternatesSelector = 0,
276
277 designComplexityType = 18,
278
279 designLevel1Selector = 0,
280 designLevel2Selector = 1,
281 designLevel3Selector = 2,
282 designLevel4Selector = 3,
283 designLevel5Selector = 4,
284 designLevel6Selector = 5,
285 designLevel7Selector = 6,
286
287 styleOptionsType = 19,
288
289 noStyleOptionsSelector = 0,
290 displayTextSelector = 1,
291 engravedTextSelector = 2,
292 illuminatedCapsSelector = 3,
293 titlingCapsSelector = 4,
294 tallCapsSelector = 5,
295
296 characterShapeType = 20,
297
298 traditionalCharactersSelector = 0,
299 simplifiedCharactersSelector = 1,
300 jis1978CharactersSelector = 2,
301 jis1983CharactersSelector = 3,
302 jis1990CharactersSelector = 4,
303 traditionalAltOneSelector = 5,
304 traditionalAltTwoSelector = 6,
305 traditionalAltThreeSelector = 7,
306 traditionalAltFourSelector = 8,
307 traditionalAltFiveSelector = 9,
308 expertCharactersSelector = 10,
309
310 numberCaseType = 21,
311
312 lowerCaseNumbersSelector = 0,
313 upperCaseNumbersSelector = 1,
314
315 textSpacingType = 22,
316
317 proportionalTextSelector = 0,
318 monospacedTextSelector = 1,
319 halfWidthTextSelector = 2,
320 normallySpacedTextSelector = 3,
321
322 transliterationType = 23,
323
324 noTransliterationSelector = 0,
325 hanjaToHangulSelector = 1,
326 hiraganaToKatakanaSelector = 2,
327 katakanaToHiraganaSelector = 3,
328 kanaToRomanizationSelector = 4,
329 romanizationToHiraganaSelector = 5,
330 romanizationToKatakanaSelector = 6,
331 hanjaToHangulAltOneSelector = 7,
332 hanjaToHangulAltTwoSelector = 8,
333 hanjaToHangulAltThreeSelector = 9,
334
335 annotationType = 24,
336
337 noAnnotationSelector = 0,
338 boxAnnotationSelector = 1,
339 roundedBoxAnnotationSelector = 2,
340 circleAnnotationSelector = 3,
341 invertedCircleAnnotationSelector = 4,
342 parenthesisAnnotationSelector = 5,
343 periodAnnotationSelector = 6,
344 romanNumeralAnnotationSelector = 7,
345 diamondAnnotationSelector = 8,
346
347 kanaSpacingType = 25,
348
349 fullWidthKanaSelector = 0,
350 proportionalKanaSelector = 1,
351
352 ideographicSpacingType = 26,
353
354 fullWidthIdeographsSelector = 0,
355 proportionalIdeographsSelector = 1,
356
357 cjkRomanSpacingType = 103,
358
359 halfWidthCJKRomanSelector = 0,
360 proportionalCJKRomanSelector = 1,
361 defaultCJKRomanSelector = 2,
362 fullWidthCJKRomanSelector = 3,
363
364 rubyKanaType = 28,
365
366 rubyKanaOnSelector = 2,
367 rubyKanaOffSelector = 3,
368
369 /* The following types are provided for compatibility; note that
370 their use is deprecated. */
371
372 adobeCharacterSpacingType = 100, /* prefer 22 */
373 adobeKanaSpacingType = 101, /* prefer 25 */
374 adobeKanjiSpacingType = 102, /* prefer 26 */
375 adobeSquareLigatures = 104, /* prefer 1 */
376
377 lastFeatureType = -1
378 };
379
380 U_NAMESPACE_END
381 #endif
382