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 383