| /* |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Oracle designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Oracle in the LICENSE file that accompanied this code. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| * |
| */ |
| |
| /* |
| * |
| * (C) Copyright IBM Corp. 1998-2004 - 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 |
| |