Remove packaging direcotry
[platform/upstream/icu.git] / source / layout / GlyphSubstLookupProc.cpp
1 /*
2  *
3  * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
4  *
5  */
6
7 #include "LETypes.h"
8 #include "LEGlyphFilter.h"
9 #include "LEFontInstance.h"
10 #include "OpenTypeTables.h"
11 #include "ICUFeatures.h"
12 #include "Lookups.h"
13 #include "ScriptAndLanguage.h"
14 #include "GlyphDefinitionTables.h"
15 #include "GlyphSubstitutionTables.h"
16 #include "SingleSubstitutionSubtables.h"
17 #include "MultipleSubstSubtables.h"
18 #include "AlternateSubstSubtables.h"
19 #include "LigatureSubstSubtables.h"
20 #include "ContextualSubstSubtables.h"
21 #include "ExtensionSubtables.h"
22 #include "LookupProcessor.h"
23 #include "GlyphSubstLookupProc.h"
24 #include "LESwaps.h"
25
26 U_NAMESPACE_BEGIN
27
28 GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor(
29         const LEReferenceTo<GlyphSubstitutionTableHeader> &glyphSubstitutionTableHeader,
30         LETag scriptTag, 
31         LETag languageTag, 
32         const LEGlyphFilter *filter, 
33         const FeatureMap *featureMap, 
34         le_int32 featureMapCount, 
35         le_bool featureOrder,
36         LEErrorCode& success)
37     : LookupProcessor(
38                       glyphSubstitutionTableHeader,
39                       SWAPW(glyphSubstitutionTableHeader->scriptListOffset),
40                       SWAPW(glyphSubstitutionTableHeader->featureListOffset),
41                       SWAPW(glyphSubstitutionTableHeader->lookupListOffset),
42                       scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success), fFilter(filter)
43 {
44     // anything?
45 }
46
47 GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor()
48 {
49 }
50
51 le_uint32 GlyphSubstitutionLookupProcessor::applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType,
52                                                        GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
53 {
54     if (LE_FAILURE(success)) {
55         return 0;
56     }
57
58     le_uint32 delta = 0;
59
60     switch(lookupType)
61     {
62     case 0:
63         break;
64
65     case gsstSingle:
66     {
67         const LEReferenceTo<SingleSubstitutionSubtable> subtable(lookupSubtable, success);
68
69         delta = subtable->process(subtable, glyphIterator, success, fFilter);
70         break;
71     }
72
73     case gsstMultiple:
74     {
75         const LEReferenceTo<MultipleSubstitutionSubtable> subtable(lookupSubtable, success);
76
77         delta = subtable->process(subtable, glyphIterator, success, fFilter);
78         break;
79     }
80
81     case gsstAlternate:
82     {
83         const LEReferenceTo<AlternateSubstitutionSubtable> subtable(lookupSubtable, success);
84
85         delta = subtable->process(subtable, glyphIterator, success, fFilter);
86         break;
87     }
88
89     case gsstLigature:
90     {
91         const LEReferenceTo<LigatureSubstitutionSubtable> subtable(lookupSubtable, success);
92
93         delta = subtable->process(subtable, glyphIterator, success, fFilter);
94         break;
95     }
96
97     case gsstContext:
98     {
99         const LEReferenceTo<ContextualSubstitutionSubtable> subtable(lookupSubtable, success);
100
101         delta = subtable->process(this, glyphIterator, fontInstance, success);
102         break;
103     }
104
105     case gsstChainingContext:
106     {
107         const LEReferenceTo<ChainingContextualSubstitutionSubtable> subtable(lookupSubtable, success);
108
109         delta = subtable->process(this, glyphIterator, fontInstance, success);
110         break;
111     }
112
113     case gsstExtension:
114     {
115         const LEReferenceTo<ExtensionSubtable> subtable(lookupSubtable, success);
116
117         delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
118         break;
119     }
120
121     default:
122         break;
123     }
124
125     return delta;
126 }
127
128 GlyphSubstitutionLookupProcessor::~GlyphSubstitutionLookupProcessor()
129 {
130 }
131
132 U_NAMESPACE_END