2 * (C) Copyright IBM Corp. 1998 - 2010 - All Rights Reserved
7 #include "LEFontInstance.h"
8 #include "OpenTypeTables.h"
9 #include "ICUFeatures.h"
11 #include "ScriptAndLanguage.h"
12 #include "GlyphDefinitionTables.h"
13 #include "GlyphPositioningTables.h"
14 #include "SinglePositioningSubtables.h"
15 #include "PairPositioningSubtables.h"
16 #include "CursiveAttachmentSubtables.h"
17 #include "MarkToBasePosnSubtables.h"
18 #include "MarkToLigaturePosnSubtables.h"
19 #include "MarkToMarkPosnSubtables.h"
20 //#include "ContextualPositioningSubtables.h"
21 #include "ContextualSubstSubtables.h"
22 #include "ExtensionSubtables.h"
23 #include "LookupProcessor.h"
24 #include "GlyphPosnLookupProc.h"
29 // Aside from the names, the contextual positioning subtables are
30 // the same as the contextual substitution subtables.
31 typedef ContextualSubstitutionSubtable ContextualPositioningSubtable
;
32 typedef ChainingContextualSubstitutionSubtable ChainingContextualPositioningSubtable
;
34 GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
35 const GlyphPositioningTableHeader
*glyphPositioningTableHeader
,
38 const FeatureMap
*featureMap
,
39 le_int32 featureMapCount
,
43 (char *) glyphPositioningTableHeader
,
44 SWAPW(glyphPositioningTableHeader
->scriptListOffset
),
45 SWAPW(glyphPositioningTableHeader
->featureListOffset
),
46 SWAPW(glyphPositioningTableHeader
->lookupListOffset
),
58 GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor()
62 le_uint32
GlyphPositioningLookupProcessor::applySubtable(const LookupSubtable
*lookupSubtable
, le_uint16 lookupType
,
63 GlyphIterator
*glyphIterator
,
64 const LEFontInstance
*fontInstance
,
65 LEErrorCode
& success
) const
67 if (LE_FAILURE(success
)) {
80 const SinglePositioningSubtable
*subtable
= (const SinglePositioningSubtable
*) lookupSubtable
;
82 delta
= subtable
->process(glyphIterator
, fontInstance
);
88 const PairPositioningSubtable
*subtable
= (const PairPositioningSubtable
*) lookupSubtable
;
90 delta
= subtable
->process(glyphIterator
, fontInstance
);
96 const CursiveAttachmentSubtable
*subtable
= (const CursiveAttachmentSubtable
*) lookupSubtable
;
98 delta
= subtable
->process(glyphIterator
, fontInstance
);
104 const MarkToBasePositioningSubtable
*subtable
= (const MarkToBasePositioningSubtable
*) lookupSubtable
;
106 delta
= subtable
->process(glyphIterator
, fontInstance
);
110 case gpstMarkToLigature
:
112 const MarkToLigaturePositioningSubtable
*subtable
= (const MarkToLigaturePositioningSubtable
*) lookupSubtable
;
114 delta
= subtable
->process(glyphIterator
, fontInstance
);
120 const MarkToMarkPositioningSubtable
*subtable
= (const MarkToMarkPositioningSubtable
*) lookupSubtable
;
122 delta
= subtable
->process(glyphIterator
, fontInstance
);
128 const ContextualPositioningSubtable
*subtable
= (const ContextualPositioningSubtable
*) lookupSubtable
;
130 delta
= subtable
->process(this, glyphIterator
, fontInstance
, success
);
134 case gpstChainedContext
:
136 const ChainingContextualPositioningSubtable
*subtable
= (const ChainingContextualPositioningSubtable
*) lookupSubtable
;
138 delta
= subtable
->process(this, glyphIterator
, fontInstance
, success
);
144 const ExtensionSubtable
*subtable
= (const ExtensionSubtable
*) lookupSubtable
;
146 delta
= subtable
->process(this, lookupType
, glyphIterator
, fontInstance
, success
);
157 GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()