3 * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved
7 #ifndef __MORPHTABLES_H
8 #define __MORPHTABLES_H
16 #include "LayoutTables.h"
22 typedef le_uint32 FeatureFlags
;
24 typedef le_int16 FeatureType
;
25 typedef le_int16 FeatureSetting
;
27 struct FeatureTableEntry
29 FeatureType featureType
;
30 FeatureSetting featureSetting
;
31 FeatureFlags enableFlags
;
32 FeatureFlags disableFlags
;
37 FeatureFlags defaultFlags
;
38 le_uint32 chainLength
;
39 le_int16 nFeatureEntries
;
41 FeatureTableEntry featureTable
[ANY_NUMBER
];
44 struct MorphTableHeader
48 ChainHeader chains
[ANY_NUMBER
];
50 void process(LEGlyphStorage
&glyphStorage
) const;
53 typedef le_int16 SubtableCoverage
;
54 typedef le_uint32 SubtableCoverage2
;
56 enum SubtableCoverageFlags
65 enum MorphSubtableType
67 mstIndicRearrangement
= 0,
68 mstContextualGlyphSubstitution
= 1,
69 mstLigatureSubstitution
= 2,
70 mstReservedUnused
= 3,
71 mstNonContextualGlyphSubstitution
= 4,
72 mstContextualGlyphInsertion
= 5
75 struct MorphSubtableHeader
78 SubtableCoverage coverage
;
79 FeatureFlags subtableFeatures
;
81 void process(LEGlyphStorage
&glyphStorage
) const;
84 enum SubtableCoverageFlags2
86 scfVertical2
= 0x80000000,
87 scfReverse2
= 0x40000000,
88 scfIgnoreVt2
= 0x20000000,
89 scfReserved2
= 0x1FFFFF00,
90 scfTypeMask2
= 0x000000FF
93 struct MorphSubtableHeader2
96 SubtableCoverage2 coverage
;
97 FeatureFlags subtableFeatures
;
99 void process(LEGlyphStorage
&glyphStorage
) const;
104 FeatureFlags defaultFlags
;
105 le_uint32 chainLength
;
106 le_uint32 nFeatureEntries
;
107 le_uint32 nSubtables
;
108 FeatureTableEntry featureTable
[ANY_NUMBER
];
111 struct MorphTableHeader2
115 ChainHeader2 chains
[ANY_NUMBER
];
117 void process(LEGlyphStorage
&glyphStorage
, le_int32 typoFlags
) const;
122 * source: https://developer.apple.com/fonts/registry/
123 * (plus addition from ATS/SFNTLayoutTypes.h)
128 allTypographicFeaturesType
= 0,
130 allTypeFeaturesOnSelector
= 0,
131 allTypeFeaturesOffSelector
= 1,
135 requiredLigaturesOnSelector
= 0,
136 requiredLigaturesOffSelector
= 1,
137 commonLigaturesOnSelector
= 2,
138 commonLigaturesOffSelector
= 3,
139 rareLigaturesOnSelector
= 4,
140 rareLigaturesOffSelector
= 5,
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,
158 cursiveConnectionType
= 2,
160 unconnectedSelector
= 0,
161 partiallyConnectedSelector
= 1,
166 upperAndLowerCaseSelector
= 0,
168 allLowerCaseSelector
= 2,
169 smallCapsSelector
= 3,
170 initialCapsSelector
= 4,
171 initialCapsAndSmallCapsSelector
= 5,
173 verticalSubstitutionType
= 4,
175 substituteVerticalFormsOnSelector
= 0,
176 substituteVerticalFormsOffSelector
= 1,
178 linguisticRearrangementType
= 5,
180 linguisticRearrangementOnSelector
= 0,
181 linguisticRearrangementOffSelector
= 1,
183 numberSpacingType
= 6,
185 monospacedNumbersSelector
= 0,
186 proportionalNumbersSelector
= 1,
189 appleReserved1Type = 7,
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,
207 showDiacriticsSelector
= 0,
208 hideDiacriticsSelector
= 1,
209 decomposeDiacriticsSelector
= 2,
211 verticalPositionType
= 10,
213 normalPositionSelector
= 0,
214 superiorsSelector
= 1,
215 inferiorsSelector
= 2,
216 ordinalsSelector
= 3,
220 noFractionsSelector
= 0,
221 verticalFractionsSelector
= 1,
222 diagonalFractionsSelector
= 2,
225 appleReserved2Type = 12,
228 overlappingCharactersType
= 13,
230 preventOverlapOnSelector
= 0,
231 preventOverlapOffSelector
= 1,
233 typographicExtrasType
= 14,
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,
250 mathematicalExtrasType
= 15,
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,
263 ornamentSetsType
= 16,
265 noOrnamentsSelector
= 0,
266 dingbatsSelector
= 1,
267 piCharactersSelector
= 2,
268 fleuronsSelector
= 3,
269 decorativeBordersSelector
= 4,
270 internationalSymbolsSelector
= 5,
271 mathSymbolsSelector
= 6,
273 characterAlternativesType
= 17,
275 noAlternatesSelector
= 0,
277 designComplexityType
= 18,
279 designLevel1Selector
= 0,
280 designLevel2Selector
= 1,
281 designLevel3Selector
= 2,
282 designLevel4Selector
= 3,
283 designLevel5Selector
= 4,
284 designLevel6Selector
= 5,
285 designLevel7Selector
= 6,
287 styleOptionsType
= 19,
289 noStyleOptionsSelector
= 0,
290 displayTextSelector
= 1,
291 engravedTextSelector
= 2,
292 illuminatedCapsSelector
= 3,
293 titlingCapsSelector
= 4,
294 tallCapsSelector
= 5,
296 characterShapeType
= 20,
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,
312 lowerCaseNumbersSelector
= 0,
313 upperCaseNumbersSelector
= 1,
315 textSpacingType
= 22,
317 proportionalTextSelector
= 0,
318 monospacedTextSelector
= 1,
319 halfWidthTextSelector
= 2,
320 normallySpacedTextSelector
= 3,
322 transliterationType
= 23,
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,
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,
347 kanaSpacingType
= 25,
349 fullWidthKanaSelector
= 0,
350 proportionalKanaSelector
= 1,
352 ideographicSpacingType
= 26,
354 fullWidthIdeographsSelector
= 0,
355 proportionalIdeographsSelector
= 1,
357 cjkRomanSpacingType
= 103,
359 halfWidthCJKRomanSelector
= 0,
360 proportionalCJKRomanSelector
= 1,
361 defaultCJKRomanSelector
= 2,
362 fullWidthCJKRomanSelector
= 3,
366 rubyKanaOnSelector
= 2,
367 rubyKanaOffSelector
= 3,
369 /* The following types are provided for compatibility; note that
370 their use is deprecated. */
372 adobeCharacterSpacingType
= 100, /* prefer 22 */
373 adobeKanaSpacingType
= 101, /* prefer 25 */
374 adobeKanjiSpacingType
= 102, /* prefer 26 */
375 adobeSquareLigatures
= 104, /* prefer 1 */