00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
00009 #define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
00010
00011 #include "LETypes.h"
00012 #include "LEFontInstance.h"
00013 #include "OpenTypeTables.h"
00014 #include "GlyphSubstitutionTables.h"
00015 #include "GlyphIterator.h"
00016 #include "LookupProcessor.h"
00017
00018 struct SubstitutionLookupRecord
00019 {
00020 le_uint16 sequenceIndex;
00021 le_uint16 lookupListIndex;
00022 };
00023
00024 struct ContextualSubstitutionBase : GlyphSubstitutionSubtable
00025 {
00026 static le_bool matchGlyphIDs(
00027 LEGlyphID *glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator);
00028
00029 static le_bool matchGlyphClasses(
00030 le_uint16 *classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
00031 ClassDefinitionTable *classDefinitionTable);
00032
00033 static le_bool matchGlyphCoverages(
00034 Offset *coverageTableOffsetArray, le_uint16 glyphCount,
00035 GlyphIterator *glyphIterator, char *offsetBase);
00036
00037 static void applySubstitutionLookups(
00038 LookupProcessor *lookupProcessor,
00039 SubstitutionLookupRecord *substLookupRecordArray,
00040 le_uint16 substCount,
00041 GlyphIterator *glyphIterator,
00042 LEFontInstance *fontInstance,
00043 le_int32 position);
00044 };
00045
00046 struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
00047 {
00048 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00049 };
00050
00051 struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
00052 {
00053 le_uint16 subRuleSetCount;
00054 Offset subRuleSetTableOffsetArray[ANY_NUMBER];
00055
00056 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00057 };
00058
00059 struct SubRuleSetTable
00060 {
00061 le_uint16 subRuleCount;
00062 Offset subRuleTableOffsetArray[ANY_NUMBER];
00063
00064 };
00065
00066
00067 struct SubRuleTable
00068 {
00069 le_uint16 glyphCount;
00070 le_uint16 substCount;
00071 LEGlyphID inputGlyphArray[ANY_NUMBER];
00072
00073 };
00074
00075 struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable
00076 {
00077 Offset classDefTableOffset;
00078 le_uint16 subClassSetCount;
00079 Offset subClassSetTableOffsetArray[ANY_NUMBER];
00080
00081 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00082 };
00083
00084 struct SubClassSetTable
00085 {
00086 le_uint16 subClassRuleCount;
00087 Offset subClassRuleTableOffsetArray[ANY_NUMBER];
00088 };
00089
00090
00091 struct SubClassRuleTable
00092 {
00093 le_uint16 glyphCount;
00094 le_uint16 substCount;
00095 le_uint16 classArray[ANY_NUMBER];
00096
00097 };
00098
00099
00100
00101
00102
00103 struct ContextualSubstitutionFormat3Subtable
00104 {
00105 le_uint16 substFormat;
00106 le_uint16 glyphCount;
00107 le_uint16 substCount;
00108 Offset coverageTableOffsetArray[ANY_NUMBER];
00109
00110
00111 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00112 };
00113
00114 struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
00115 {
00116 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00117 };
00118
00119 struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
00120 {
00121 le_uint16 chainSubRuleSetCount;
00122 Offset chainSubRuleSetTableOffsetArray[ANY_NUMBER];
00123
00124 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00125 };
00126
00127 struct ChainSubRuleSetTable
00128 {
00129 le_uint16 chainSubRuleCount;
00130 Offset chainSubRuleTableOffsetArray[ANY_NUMBER];
00131
00132 };
00133
00134
00135 struct ChainSubRuleTable
00136 {
00137 le_uint16 backtrackGlyphCount;
00138 LEGlyphID backtrackGlyphArray[ANY_NUMBER];
00139
00140
00141
00142
00143
00144
00145 };
00146
00147 struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable
00148 {
00149 Offset backtrackClassDefTableOffset;
00150 Offset inputClassDefTableOffset;
00151 Offset lookaheadClassDefTableOffset;
00152 le_uint16 chainSubClassSetCount;
00153 Offset chainSubClassSetTableOffsetArray[ANY_NUMBER];
00154
00155 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00156 };
00157
00158 struct ChainSubClassSetTable
00159 {
00160 le_uint16 chainSubClassRuleCount;
00161 Offset chainSubClassRuleTableOffsetArray[ANY_NUMBER];
00162 };
00163
00164
00165 struct ChainSubClassRuleTable
00166 {
00167 le_uint16 backtrackGlyphCount;
00168 le_uint16 backtrackClassArray[ANY_NUMBER];
00169
00170
00171
00172
00173
00174
00175 };
00176
00177
00178
00179
00180
00181 struct ChainingContextualSubstitutionFormat3Subtable
00182 {
00183 le_uint16 substFormat;
00184 le_uint16 backtrackGlyphCount;
00185 Offset backtrackCoverageTableOffsetArray[ANY_NUMBER];
00186
00187
00188
00189
00190
00191
00192
00193 le_uint32 process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00194 };
00195
00196 #endif