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