Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

ContextualSubstitutionSubtables.h

Go to the documentation of this file.
00001 /*
00002  * @(#)ContextualSubstitutionSubtables.h        1.7 00/03/15
00003  *
00004  * (C) Copyright IBM Corp. 1998, 1999, 2000 - All Rights Reserved
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 // NOTE: Multiple variable size arrays!!
00067 struct SubRuleTable
00068 {
00069     le_uint16  glyphCount;
00070     le_uint16  substCount;
00071     LEGlyphID inputGlyphArray[ANY_NUMBER];
00072   //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
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 // NOTE: Multiple variable size arrays!!
00091 struct SubClassRuleTable
00092 {
00093     le_uint16  glyphCount;
00094     le_uint16  substCount;
00095     le_uint16  classArray[ANY_NUMBER];
00096   //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
00097 };
00098 
00099 // NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
00100 // it has an array of coverage tables instead of a single coverage table...
00101 //
00102 // NOTE: Multiple variable size arrays!!
00103 struct ContextualSubstitutionFormat3Subtable
00104 {
00105     le_uint16  substFormat;
00106     le_uint16  glyphCount;
00107     le_uint16  substCount;
00108     Offset  coverageTableOffsetArray[ANY_NUMBER];
00109   //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
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 // NOTE: Multiple variable size arrays!!
00135 struct ChainSubRuleTable
00136 {
00137     le_uint16  backtrackGlyphCount;
00138     LEGlyphID backtrackGlyphArray[ANY_NUMBER];
00139   //le_uint16  inputGlyphCount;
00140   //LEGlyphID inputGlyphArray[ANY_NUMBER];
00141   //le_uint16  lookaheadGlyphCount;
00142   //LEGlyphID lookaheadGlyphArray[ANY_NUMBER];
00143   //le_uint16  substCount;
00144   //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
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 // NOTE: Multiple variable size arrays!!
00165 struct ChainSubClassRuleTable
00166 {
00167     le_uint16  backtrackGlyphCount;
00168     le_uint16  backtrackClassArray[ANY_NUMBER];
00169   //le_uint16  inputGlyphCount;
00170   //le_uint16  inputClassArray[ANY_NUMBER];
00171   //le_uint16  lookaheadGlyphCount;
00172   //le_uint16  lookaheadClassArray[ANY_NUMBER];
00173   //le_uint16  substCount;
00174   //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
00175 };
00176 
00177 // NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
00178 // it has arrays of coverage tables instead of a single coverage table...
00179 //
00180 // NOTE: Multiple variable size arrays!!
00181 struct ChainingContextualSubstitutionFormat3Subtable
00182 {
00183     le_uint16  substFormat;
00184     le_uint16  backtrackGlyphCount;
00185     Offset  backtrackCoverageTableOffsetArray[ANY_NUMBER];
00186   //le_uint16  inputGlyphCount;
00187   //Offset  inputCoverageTableOffsetArray[ANY_NUMBER];
00188   //le_uint16  lookaheadGlyphCount;
00189   //le_uint16  lookaheadCoverageTableOffsetArray[ANY_NUMBER];
00190   //le_uint16  substCount;
00191   //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
00192 
00193     le_uint32  process(LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, LEFontInstance *fontInstance);
00194 };
00195 
00196 #endif

Generated at Tue Dec 5 18:12:59 2000 for ICU by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000