2 * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved
7 #include "LEFontInstance.h"
8 #include "OpenTypeTables.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
,
36 LETag scriptTag
, LETag languageTag
, const FeatureMap
*featureMap
, le_int32 featureMapCount
, le_bool featureOrder
)
38 (char *) glyphPositioningTableHeader
,
39 SWAPW(glyphPositioningTableHeader
->scriptListOffset
),
40 SWAPW(glyphPositioningTableHeader
->featureListOffset
),
41 SWAPW(glyphPositioningTableHeader
->lookupListOffset
),
42 scriptTag
, languageTag
, featureMap
, featureMapCount
, featureOrder
)
47 GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor()
51 le_uint32
GlyphPositioningLookupProcessor::applySubtable(const LookupSubtable
*lookupSubtable
, le_uint16 lookupType
,
52 GlyphIterator
*glyphIterator
,
53 const LEFontInstance
*fontInstance
) const
64 const SinglePositioningSubtable
*subtable
= (const SinglePositioningSubtable
*) lookupSubtable
;
66 delta
= subtable
->process(glyphIterator
, fontInstance
);
72 const PairPositioningSubtable
*subtable
= (const PairPositioningSubtable
*) lookupSubtable
;
74 delta
= subtable
->process(glyphIterator
, fontInstance
);
80 const CursiveAttachmentSubtable
*subtable
= (const CursiveAttachmentSubtable
*) lookupSubtable
;
82 delta
= subtable
->process(glyphIterator
, fontInstance
);
88 const MarkToBasePositioningSubtable
*subtable
= (const MarkToBasePositioningSubtable
*) lookupSubtable
;
90 delta
= subtable
->process(glyphIterator
, fontInstance
);
94 case gpstMarkToLigature
:
96 const MarkToLigaturePositioningSubtable
*subtable
= (const MarkToLigaturePositioningSubtable
*) lookupSubtable
;
98 delta
= subtable
->process(glyphIterator
, fontInstance
);
104 const MarkToMarkPositioningSubtable
*subtable
= (const MarkToMarkPositioningSubtable
*) lookupSubtable
;
106 delta
= subtable
->process(glyphIterator
, fontInstance
);
112 const ContextualPositioningSubtable
*subtable
= (const ContextualPositioningSubtable
*) lookupSubtable
;
114 delta
= subtable
->process(this, glyphIterator
, fontInstance
);
118 case gpstChainedContext
:
120 const ChainingContextualPositioningSubtable
*subtable
= (const ChainingContextualPositioningSubtable
*) lookupSubtable
;
122 delta
= subtable
->process(this, glyphIterator
, fontInstance
);
128 const ExtensionSubtable
*subtable
= (const ExtensionSubtable
*) lookupSubtable
;
130 delta
= subtable
->process(this, lookupType
, glyphIterator
, fontInstance
);
141 GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()