00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __MORPHTABLES_H
00009 #define __MORPHTABLES_H
00010
00011 #include "LETypes.h"
00012 #include "LayoutTables.h"
00013
00014 typedef le_uint32 FeatureFlags;
00015
00016 typedef le_int16 FeatureType;
00017 typedef le_int16 FeatureSetting;
00018
00019 struct FeatureTableEntry
00020 {
00021 FeatureType featureType;
00022 FeatureSetting featureSetting;
00023 FeatureFlags enableFlags;
00024 FeatureFlags disableFlags;
00025 };
00026
00027 struct ChainHeader
00028 {
00029 FeatureFlags defaultFlags;
00030 le_uint32 chainLength;
00031 le_int16 nFeatureEntries;
00032 le_int16 nSubtables;
00033 FeatureTableEntry featureTable[ANY_NUMBER];
00034 };
00035
00036 struct MorphTableHeader
00037 {
00038 le_int32 version;
00039 le_uint32 nChains;
00040 ChainHeader chains[ANY_NUMBER];
00041
00042 void process(LEGlyphID *glyphs, le_int32 *glyphIndices, le_int32 glyphCount);
00043 };
00044
00045 typedef le_int16 SubtableCoverage;
00046
00047 enum SubtableCoverageFlags
00048 {
00049 scfVertical = 0x8000,
00050 scfReverse = 0x4000,
00051 scfIgnoreVt = 0x2000,
00052 scfReserved = 0x1FF8,
00053 scfTypeMask = 0x0007
00054 };
00055
00056 enum MorphSubtableType
00057 {
00058 mstIndicRearrangement = 0,
00059 mstContextualGlyphSubstitution = 1,
00060 mstLigatureSubstitution = 2,
00061 mstReservedUnused = 3,
00062 mstNonContextualGlyphSubstitution = 4,
00063 mstContextualGlyphInsertion = 5
00064 };
00065
00066 struct MorphSubtableHeader
00067 {
00068 le_int16 length;
00069 SubtableCoverage coverage;
00070 FeatureFlags subtableFeatures;
00071
00072 void process(LEGlyphID *glyphs, le_int32 *glyphIndices, le_int32 glyphCount);
00073 };
00074
00075 #endif
00076