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 #include "LETableReference.h" 18 19 U_NAMESPACE_BEGIN 20 21 class LEGlyphStorage; 22 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 }; 44 LE_VAR_ARRAY(ChainHeader, featureTable) 45 46 struct MorphTableHeader 47 { 48 le_int32 version; 49 le_uint32 nChains; 50 ChainHeader chains[ANY_NUMBER]; 51 52 void process(const LETableReference& base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; 53 }; 54 LE_VAR_ARRAY(MorphTableHeader, chains) 55 56 typedef le_int16 SubtableCoverage; 57 typedef le_uint32 SubtableCoverage2; 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 84 void process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; 85 }; 86 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 102 void process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; 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 }; 113 LE_VAR_ARRAY(ChainHeader2, featureTable) 114 115 struct MorphTableHeader2 116 { 117 le_int32 version; 118 le_uint32 nChains; 119 ChainHeader2 chains[ANY_NUMBER]; 120 121 void process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage, le_int32 typoFlags, LEErrorCode &success) const; 122 }; 123 LE_VAR_ARRAY(MorphTableHeader2, chains) 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 385 U_NAMESPACE_END 386 #endif 387 388