os/textandloc/fontservices/textshaperplugin/IcuSource/layout/ContextualSubstSubtables.h
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/textandloc/fontservices/textshaperplugin/IcuSource/layout/ContextualSubstSubtables.h Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,213 @@
1.4 +/*
1.5 + *
1.6 + * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
1.7 + *
1.8 + */
1.9 +
1.10 +#ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
1.11 +#define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
1.12 +
1.13 +/**
1.14 + * \file
1.15 + * \internal
1.16 + */
1.17 +
1.18 +#include "LETypes.h"
1.19 +#include "LEFontInstance.h"
1.20 +#include "OpenTypeTables.h"
1.21 +#include "GlyphSubstitutionTables.h"
1.22 +#include "GlyphIterator.h"
1.23 +#include "LookupProcessor.h"
1.24 +
1.25 +U_NAMESPACE_BEGIN
1.26 +
1.27 +struct SubstitutionLookupRecord
1.28 +{
1.29 + le_uint16 sequenceIndex;
1.30 + le_uint16 lookupListIndex;
1.31 +};
1.32 +
1.33 +struct ContextualSubstitutionBase : GlyphSubstitutionSubtable
1.34 +{
1.35 + static le_bool matchGlyphIDs(
1.36 + const TTGlyphID *glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
1.37 + le_bool backtrack = FALSE);
1.38 +
1.39 + static le_bool matchGlyphClasses(
1.40 + const le_uint16 *classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
1.41 + const ClassDefinitionTable *classDefinitionTable, le_bool backtrack = FALSE);
1.42 +
1.43 + static le_bool matchGlyphCoverages(
1.44 + const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
1.45 + GlyphIterator *glyphIterator, const char *offsetBase, le_bool backtrack = FALSE);
1.46 +
1.47 + static void applySubstitutionLookups(
1.48 + const LookupProcessor *lookupProcessor,
1.49 + const SubstitutionLookupRecord *substLookupRecordArray,
1.50 + le_uint16 substCount,
1.51 + GlyphIterator *glyphIterator,
1.52 + const LEFontInstance *fontInstance,
1.53 + le_int32 position,
1.54 + LEErrorCode& success);
1.55 +};
1.56 +
1.57 +struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
1.58 +{
1.59 + le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.60 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.61 +};
1.62 +
1.63 +struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
1.64 +{
1.65 + le_uint16 subRuleSetCount;
1.66 + Offset subRuleSetTableOffsetArray[ANY_NUMBER];
1.67 +
1.68 + le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.69 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.70 +};
1.71 +
1.72 +struct SubRuleSetTable
1.73 +{
1.74 + le_uint16 subRuleCount;
1.75 + Offset subRuleTableOffsetArray[ANY_NUMBER];
1.76 +
1.77 +};
1.78 +
1.79 +// NOTE: Multiple variable size arrays!!
1.80 +struct SubRuleTable
1.81 +{
1.82 + le_uint16 glyphCount;
1.83 + le_uint16 substCount;
1.84 + TTGlyphID inputGlyphArray[ANY_NUMBER];
1.85 + //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
1.86 +};
1.87 +
1.88 +struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable
1.89 +{
1.90 + Offset classDefTableOffset;
1.91 + le_uint16 subClassSetCount;
1.92 + Offset subClassSetTableOffsetArray[ANY_NUMBER];
1.93 +
1.94 + le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.95 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.96 +};
1.97 +
1.98 +struct SubClassSetTable
1.99 +{
1.100 + le_uint16 subClassRuleCount;
1.101 + Offset subClassRuleTableOffsetArray[ANY_NUMBER];
1.102 +};
1.103 +
1.104 +// NOTE: Multiple variable size arrays!!
1.105 +struct SubClassRuleTable
1.106 +{
1.107 + le_uint16 glyphCount;
1.108 + le_uint16 substCount;
1.109 + le_uint16 classArray[ANY_NUMBER];
1.110 + //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
1.111 +};
1.112 +
1.113 +// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
1.114 +// it has an array of coverage tables instead of a single coverage table...
1.115 +//
1.116 +// NOTE: Multiple variable size arrays!!
1.117 +struct ContextualSubstitutionFormat3Subtable
1.118 +{
1.119 + le_uint16 substFormat;
1.120 + le_uint16 glyphCount;
1.121 + le_uint16 substCount;
1.122 + Offset coverageTableOffsetArray[ANY_NUMBER];
1.123 + //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
1.124 +
1.125 + le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.126 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.127 +};
1.128 +
1.129 +struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
1.130 +{
1.131 + le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.132 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.133 +};
1.134 +
1.135 +struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
1.136 +{
1.137 + le_uint16 chainSubRuleSetCount;
1.138 + Offset chainSubRuleSetTableOffsetArray[ANY_NUMBER];
1.139 +
1.140 + le_uint32 process (const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.141 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.142 +};
1.143 +
1.144 +struct ChainSubRuleSetTable
1.145 +{
1.146 + le_uint16 chainSubRuleCount;
1.147 + Offset chainSubRuleTableOffsetArray[ANY_NUMBER];
1.148 +
1.149 +};
1.150 +
1.151 +// NOTE: Multiple variable size arrays!!
1.152 +struct ChainSubRuleTable
1.153 +{
1.154 + le_uint16 backtrackGlyphCount;
1.155 + TTGlyphID backtrackGlyphArray[ANY_NUMBER];
1.156 + //le_uint16 inputGlyphCount;
1.157 + //TTGlyphID inputGlyphArray[ANY_NUMBER];
1.158 + //le_uint16 lookaheadGlyphCount;
1.159 + //TTGlyphID lookaheadGlyphArray[ANY_NUMBER];
1.160 + //le_uint16 substCount;
1.161 + //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
1.162 +};
1.163 +
1.164 +struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable
1.165 +{
1.166 + Offset backtrackClassDefTableOffset;
1.167 + Offset inputClassDefTableOffset;
1.168 + Offset lookaheadClassDefTableOffset;
1.169 + le_uint16 chainSubClassSetCount;
1.170 + Offset chainSubClassSetTableOffsetArray[ANY_NUMBER];
1.171 +
1.172 + le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.173 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.174 +};
1.175 +
1.176 +struct ChainSubClassSetTable
1.177 +{
1.178 + le_uint16 chainSubClassRuleCount;
1.179 + Offset chainSubClassRuleTableOffsetArray[ANY_NUMBER];
1.180 +};
1.181 +
1.182 +// NOTE: Multiple variable size arrays!!
1.183 +struct ChainSubClassRuleTable
1.184 +{
1.185 + le_uint16 backtrackGlyphCount;
1.186 + le_uint16 backtrackClassArray[ANY_NUMBER];
1.187 + //le_uint16 inputGlyphCount;
1.188 + //le_uint16 inputClassArray[ANY_NUMBER];
1.189 + //le_uint16 lookaheadGlyphCount;
1.190 + //le_uint16 lookaheadClassArray[ANY_NUMBER];
1.191 + //le_uint16 substCount;
1.192 + //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
1.193 +};
1.194 +
1.195 +// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
1.196 +// it has arrays of coverage tables instead of a single coverage table...
1.197 +//
1.198 +// NOTE: Multiple variable size arrays!!
1.199 +struct ChainingContextualSubstitutionFormat3Subtable
1.200 +{
1.201 + le_uint16 substFormat;
1.202 + le_uint16 backtrackGlyphCount;
1.203 + Offset backtrackCoverageTableOffsetArray[ANY_NUMBER];
1.204 + //le_uint16 inputGlyphCount;
1.205 + //Offset inputCoverageTableOffsetArray[ANY_NUMBER];
1.206 + //le_uint16 lookaheadGlyphCount;
1.207 + //le_uint16 lookaheadCoverageTableOffsetArray[ANY_NUMBER];
1.208 + //le_uint16 substCount;
1.209 + //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
1.210 +
1.211 + le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
1.212 + const LEFontInstance *fontInstance, LEErrorCode& success) const;
1.213 +};
1.214 +
1.215 +U_NAMESPACE_END
1.216 +#endif