| /* | 
 |  * | 
 |  * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved | 
 |  * | 
 |  */ | 
 |  | 
 | #ifndef __MORPHTABLES_H | 
 | #define __MORPHTABLES_H | 
 |  | 
 | /** | 
 |  * \file | 
 |  * \internal | 
 |  */ | 
 |  | 
 | #include "LETypes.h" | 
 | #include "LayoutTables.h" | 
 | #include "LETableReference.h" | 
 |  | 
 | U_NAMESPACE_BEGIN | 
 |  | 
 | class LEGlyphStorage; | 
 |  | 
 | typedef le_uint32 FeatureFlags; | 
 |  | 
 | typedef le_int16 FeatureType; | 
 | typedef le_int16 FeatureSetting; | 
 |  | 
 | struct FeatureTableEntry | 
 | { | 
 |     FeatureType     featureType; | 
 |     FeatureSetting  featureSetting; | 
 |     FeatureFlags    enableFlags; | 
 |     FeatureFlags    disableFlags; | 
 | }; | 
 |  | 
 | struct ChainHeader | 
 | { | 
 |     FeatureFlags        defaultFlags; | 
 |     le_uint32           chainLength; | 
 |     le_int16           nFeatureEntries; | 
 |     le_int16           nSubtables; | 
 |     FeatureTableEntry   featureTable[ANY_NUMBER]; | 
 | }; | 
 | LE_VAR_ARRAY(ChainHeader, featureTable) | 
 |  | 
 | struct MorphTableHeader | 
 | { | 
 |     le_int32    version; | 
 |     le_uint32   nChains; | 
 |     ChainHeader chains[ANY_NUMBER]; | 
 |  | 
 |   void process(const LETableReference& base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; | 
 | }; | 
 | LE_VAR_ARRAY(MorphTableHeader, chains) | 
 |  | 
 | typedef le_int16 SubtableCoverage; | 
 | typedef le_uint32 SubtableCoverage2; | 
 |  | 
 | enum SubtableCoverageFlags | 
 | { | 
 |     scfVertical = 0x8000, | 
 |     scfReverse  = 0x4000, | 
 |     scfIgnoreVt = 0x2000, | 
 |     scfReserved = 0x1FF8, | 
 |     scfTypeMask = 0x0007 | 
 | }; | 
 |  | 
 | enum MorphSubtableType | 
 | { | 
 |     mstIndicRearrangement               = 0, | 
 |     mstContextualGlyphSubstitution      = 1, | 
 |     mstLigatureSubstitution             = 2, | 
 |     mstReservedUnused                   = 3, | 
 |     mstNonContextualGlyphSubstitution   = 4, | 
 |     mstContextualGlyphInsertion         = 5 | 
 | }; | 
 |  | 
 | struct MorphSubtableHeader | 
 | { | 
 |     le_int16           length; | 
 |     SubtableCoverage    coverage; | 
 |     FeatureFlags        subtableFeatures; | 
 |  | 
 |   void process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; | 
 | }; | 
 |  | 
 | enum SubtableCoverageFlags2 | 
 | { | 
 |     scfVertical2 = 0x80000000, | 
 |     scfReverse2  = 0x40000000, | 
 |     scfIgnoreVt2 = 0x20000000, | 
 |     scfReserved2 = 0x1FFFFF00, | 
 |     scfTypeMask2 = 0x000000FF | 
 | }; | 
 |  | 
 | struct MorphSubtableHeader2 | 
 | { | 
 |     le_uint32           length; | 
 |     SubtableCoverage2    coverage; | 
 |     FeatureFlags        subtableFeatures; | 
 |      | 
 |     void process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; | 
 | }; | 
 |  | 
 | struct ChainHeader2 | 
 | { | 
 |     FeatureFlags        defaultFlags; | 
 |     le_uint32           chainLength; | 
 |     le_uint32           nFeatureEntries; | 
 |     le_uint32           nSubtables; | 
 |     FeatureTableEntry   featureTable[ANY_NUMBER]; | 
 | }; | 
 | LE_VAR_ARRAY(ChainHeader2, featureTable) | 
 |  | 
 | struct MorphTableHeader2 | 
 | { | 
 |     le_int32    version; | 
 |     le_uint32   nChains; | 
 |     ChainHeader2 chains[ANY_NUMBER]; | 
 |      | 
 |     void process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage, le_int32 typoFlags, LEErrorCode &success) const; | 
 | }; | 
 | LE_VAR_ARRAY(MorphTableHeader2, chains) | 
 |  | 
 | /* | 
 |  * AAT Font Features | 
 |  * source: https://developer.apple.com/fonts/registry/ | 
 |  * (plus addition from ATS/SFNTLayoutTypes.h) | 
 |  */ | 
 |   | 
 | enum { | 
 |  | 
 |    allTypographicFeaturesType = 0, | 
 |  | 
 |       allTypeFeaturesOnSelector            = 0, | 
 |       allTypeFeaturesOffSelector           = 1, | 
 |  | 
 |    ligaturesType = 1, | 
 |  | 
 |       requiredLigaturesOnSelector          = 0, | 
 |       requiredLigaturesOffSelector         = 1, | 
 |       commonLigaturesOnSelector            = 2, | 
 |       commonLigaturesOffSelector           = 3, | 
 |       rareLigaturesOnSelector              = 4, | 
 |       rareLigaturesOffSelector             = 5, | 
 |       logosOnSelector                      = 6, | 
 |       logosOffSelector                     = 7, | 
 |       rebusPicturesOnSelector              = 8, | 
 |       rebusPicturesOffSelector             = 9, | 
 |       diphthongLigaturesOnSelector         = 10, | 
 |       diphthongLigaturesOffSelector        = 11, | 
 |       squaredLigaturesOnSelector           = 12, | 
 |       squaredLigaturesOffSelector          = 13, | 
 |       abbrevSquaredLigaturesOnSelector     = 14, | 
 |       abbrevSquaredLigaturesOffSelector    = 15, | 
 |       symbolLigaturesOnSelector            = 16, | 
 |       symbolLigaturesOffSelector           = 17, | 
 |       contextualLigaturesOnSelector        = 18, | 
 |       contextualLigaturesOffSelector       = 19, | 
 |       historicalLigaturesOnSelector        = 20, | 
 |       historicalLigaturesOffSelector       = 21, | 
 |  | 
 |    cursiveConnectionType = 2, | 
 |  | 
 |       unconnectedSelector                  = 0, | 
 |       partiallyConnectedSelector           = 1, | 
 |       cursiveSelector                      = 2, | 
 |  | 
 |    letterCaseType = 3, | 
 |  | 
 |       upperAndLowerCaseSelector            = 0, | 
 |       allCapsSelector                      = 1, | 
 |       allLowerCaseSelector                 = 2, | 
 |       smallCapsSelector                    = 3, | 
 |       initialCapsSelector                  = 4, | 
 |       initialCapsAndSmallCapsSelector      = 5, | 
 |  | 
 |    verticalSubstitutionType = 4, | 
 |  | 
 |       substituteVerticalFormsOnSelector    = 0, | 
 |       substituteVerticalFormsOffSelector   = 1, | 
 |  | 
 |    linguisticRearrangementType = 5, | 
 |  | 
 |       linguisticRearrangementOnSelector    = 0, | 
 |       linguisticRearrangementOffSelector   = 1, | 
 |  | 
 |    numberSpacingType = 6, | 
 |  | 
 |       monospacedNumbersSelector            = 0, | 
 |       proportionalNumbersSelector          = 1, | 
 |  | 
 |    /* | 
 |    appleReserved1Type = 7, | 
 |    */ | 
 |  | 
 |    smartSwashType = 8, | 
 |  | 
 |       wordInitialSwashesOnSelector         = 0, | 
 |       wordInitialSwashesOffSelector        = 1, | 
 |       wordFinalSwashesOnSelector           = 2, | 
 |       wordFinalSwashesOffSelector          = 3, | 
 |       lineInitialSwashesOnSelector         = 4, | 
 |       lineInitialSwashesOffSelector        = 5, | 
 |       lineFinalSwashesOnSelector           = 6, | 
 |       lineFinalSwashesOffSelector          = 7, | 
 |       nonFinalSwashesOnSelector            = 8, | 
 |       nonFinalSwashesOffSelector           = 9, | 
 |  | 
 |    diacriticsType = 9, | 
 |  | 
 |       showDiacriticsSelector               = 0, | 
 |       hideDiacriticsSelector               = 1, | 
 |       decomposeDiacriticsSelector          = 2, | 
 |  | 
 |    verticalPositionType = 10, | 
 |  | 
 |       normalPositionSelector               = 0, | 
 |       superiorsSelector                    = 1, | 
 |       inferiorsSelector                    = 2, | 
 |       ordinalsSelector                     = 3, | 
 |  | 
 |    fractionsType = 11, | 
 |  | 
 |       noFractionsSelector                  = 0, | 
 |       verticalFractionsSelector            = 1, | 
 |       diagonalFractionsSelector            = 2, | 
 |  | 
 |    /* | 
 |    appleReserved2Type = 12, | 
 |    */ | 
 |  | 
 |    overlappingCharactersType = 13, | 
 |  | 
 |       preventOverlapOnSelector             = 0, | 
 |       preventOverlapOffSelector            = 1, | 
 |  | 
 |    typographicExtrasType = 14, | 
 |  | 
 |       hyphensToEmDashOnSelector            = 0, | 
 |       hyphensToEmDashOffSelector           = 1, | 
 |       hyphenToEnDashOnSelector             = 2, | 
 |       hyphenToEnDashOffSelector            = 3, | 
 |       unslashedZeroOnSelector              = 4, | 
 |       slashedZeroOffSelector               = 4, | 
 |       unslashedZeroOffSelector             = 5, | 
 |       slashedZeroOnSelector                = 5, | 
 |       formInterrobangOnSelector            = 6, | 
 |       formInterrobangOffSelector           = 7, | 
 |       smartQuotesOnSelector                = 8, | 
 |       smartQuotesOffSelector               = 9, | 
 |       periodsToEllipsisOnSelector          = 10, | 
 |       periodsToEllipsisOffSelector         = 11, | 
 |  | 
 |    mathematicalExtrasType = 15, | 
 |  | 
 |       hyphenToMinusOnSelector              = 0, | 
 |       hyphenToMinusOffSelector             = 1, | 
 |       asteriskToMultiplyOnSelector         = 2, | 
 |       asteriskToMultiplyOffSelector        = 3, | 
 |       slashToDivideOnSelector              = 4, | 
 |       slashToDivideOffSelector             = 5, | 
 |       inequalityLigaturesOnSelector        = 6, | 
 |       inequalityLigaturesOffSelector       = 7, | 
 |       exponentsOnSelector                  = 8, | 
 |       exponentsOffSelector                 = 9, | 
 |  | 
 |    ornamentSetsType = 16, | 
 |  | 
 |       noOrnamentsSelector                  = 0, | 
 |       dingbatsSelector                     = 1, | 
 |       piCharactersSelector                 = 2, | 
 |       fleuronsSelector                     = 3, | 
 |       decorativeBordersSelector            = 4, | 
 |       internationalSymbolsSelector         = 5, | 
 |       mathSymbolsSelector                  = 6, | 
 |  | 
 |    characterAlternativesType = 17, | 
 |  | 
 |       noAlternatesSelector                 = 0, | 
 |  | 
 |    designComplexityType = 18, | 
 |  | 
 |       designLevel1Selector                 = 0, | 
 |       designLevel2Selector                 = 1, | 
 |       designLevel3Selector                 = 2, | 
 |       designLevel4Selector                 = 3, | 
 |       designLevel5Selector                 = 4, | 
 |       designLevel6Selector                 = 5, | 
 |       designLevel7Selector                 = 6, | 
 |  | 
 |    styleOptionsType = 19, | 
 |  | 
 |       noStyleOptionsSelector               = 0, | 
 |       displayTextSelector                  = 1, | 
 |       engravedTextSelector                 = 2, | 
 |       illuminatedCapsSelector              = 3, | 
 |       titlingCapsSelector                  = 4, | 
 |       tallCapsSelector                     = 5, | 
 |  | 
 |    characterShapeType = 20, | 
 |  | 
 |       traditionalCharactersSelector        = 0, | 
 |       simplifiedCharactersSelector         = 1, | 
 |       jis1978CharactersSelector            = 2, | 
 |       jis1983CharactersSelector            = 3, | 
 |       jis1990CharactersSelector            = 4, | 
 |       traditionalAltOneSelector            = 5, | 
 |       traditionalAltTwoSelector            = 6, | 
 |       traditionalAltThreeSelector          = 7, | 
 |       traditionalAltFourSelector           = 8, | 
 |       traditionalAltFiveSelector           = 9, | 
 |       expertCharactersSelector             = 10, | 
 |  | 
 |    numberCaseType = 21, | 
 |  | 
 |       lowerCaseNumbersSelector             = 0, | 
 |       upperCaseNumbersSelector             = 1, | 
 |  | 
 |    textSpacingType = 22, | 
 |  | 
 |       proportionalTextSelector             = 0, | 
 |       monospacedTextSelector               = 1, | 
 |       halfWidthTextSelector                = 2, | 
 |       normallySpacedTextSelector           = 3, | 
 |  | 
 |    transliterationType = 23, | 
 |  | 
 |       noTransliterationSelector            = 0, | 
 |       hanjaToHangulSelector                = 1, | 
 |       hiraganaToKatakanaSelector           = 2, | 
 |       katakanaToHiraganaSelector           = 3, | 
 |       kanaToRomanizationSelector           = 4, | 
 |       romanizationToHiraganaSelector       = 5, | 
 |       romanizationToKatakanaSelector       = 6, | 
 |       hanjaToHangulAltOneSelector          = 7, | 
 |       hanjaToHangulAltTwoSelector          = 8, | 
 |       hanjaToHangulAltThreeSelector        = 9, | 
 |  | 
 |    annotationType = 24, | 
 |  | 
 |       noAnnotationSelector                 = 0, | 
 |       boxAnnotationSelector                = 1, | 
 |       roundedBoxAnnotationSelector         = 2, | 
 |       circleAnnotationSelector             = 3, | 
 |       invertedCircleAnnotationSelector     = 4, | 
 |       parenthesisAnnotationSelector        = 5, | 
 |       periodAnnotationSelector             = 6, | 
 |       romanNumeralAnnotationSelector       = 7, | 
 |       diamondAnnotationSelector            = 8, | 
 |  | 
 |    kanaSpacingType = 25, | 
 |  | 
 |       fullWidthKanaSelector                = 0, | 
 |       proportionalKanaSelector             = 1, | 
 |  | 
 |    ideographicSpacingType = 26, | 
 |  | 
 |       fullWidthIdeographsSelector          = 0, | 
 |       proportionalIdeographsSelector       = 1, | 
 |  | 
 |    cjkRomanSpacingType = 103, | 
 |  | 
 |       halfWidthCJKRomanSelector            = 0, | 
 |       proportionalCJKRomanSelector         = 1, | 
 |       defaultCJKRomanSelector              = 2, | 
 |       fullWidthCJKRomanSelector            = 3, | 
 |  | 
 |    rubyKanaType = 28, | 
 |  | 
 |       rubyKanaOnSelector                = 2, | 
 |       rubyKanaOffSelector               = 3, | 
 |  | 
 | /* The following types are provided for compatibility; note that | 
 |    their use is deprecated. */ | 
 |  | 
 |    adobeCharacterSpacingType = 100,        /* prefer 22 */ | 
 |    adobeKanaSpacingType = 101,             /* prefer 25 */ | 
 |    adobeKanjiSpacingType = 102,            /* prefer 26 */ | 
 |    adobeSquareLigatures = 104,             /* prefer 1 */ | 
 |  | 
 |    lastFeatureType = -1 | 
 | }; | 
 |  | 
 | U_NAMESPACE_END | 
 | #endif | 
 |  |