1 /* 2 * 3 * (C) Copyright IBM Corp. 1998-2004 - 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 55 enum SubtableCoverageFlags 56 { 57 scfVertical = 0x8000, 58 scfReverse = 0x4000, 59 scfIgnoreVt = 0x2000, 60 scfReserved = 0x1FF8, 61 scfTypeMask = 0x0007 62 }; 63 64 enum MorphSubtableType 65 { 66 mstIndicRearrangement = 0, 67 mstContextualGlyphSubstitution = 1, 68 mstLigatureSubstitution = 2, 69 mstReservedUnused = 3, 70 mstNonContextualGlyphSubstitution = 4, 71 mstContextualGlyphInsertion = 5 72 }; 73 74 struct MorphSubtableHeader 75 { 76 le_int16 length; 77 SubtableCoverage coverage; 78 FeatureFlags subtableFeatures; 79 80 void process(LEGlyphStorage &glyphStorage) const; 81 }; 82 83 U_NAMESPACE_END 84 #endif 85 86