]> git.saurik.com Git - apple/icu.git/blame_incremental - icuSources/layout/GlyphPosnLookupProc.cpp
ICU-511.35.tar.gz
[apple/icu.git] / icuSources / layout / GlyphPosnLookupProc.cpp
... / ...
CommitLineData
1/*
2 * (C) Copyright IBM Corp. 1998 - 2010 - All Rights Reserved
3 *
4 */
5
6#include "LETypes.h"
7#include "LEFontInstance.h"
8#include "OpenTypeTables.h"
9#include "ICUFeatures.h"
10#include "Lookups.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"
25#include "LESwaps.h"
26
27U_NAMESPACE_BEGIN
28
29// Aside from the names, the contextual positioning subtables are
30// the same as the contextual substitution subtables.
31typedef ContextualSubstitutionSubtable ContextualPositioningSubtable;
32typedef ChainingContextualSubstitutionSubtable ChainingContextualPositioningSubtable;
33
34GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
35 const GlyphPositioningTableHeader *glyphPositioningTableHeader,
36 LETag scriptTag,
37 LETag languageTag,
38 const FeatureMap *featureMap,
39 le_int32 featureMapCount,
40 le_bool featureOrder,
41 LEErrorCode& success)
42 : LookupProcessor(
43 (char *) glyphPositioningTableHeader,
44 SWAPW(glyphPositioningTableHeader->scriptListOffset),
45 SWAPW(glyphPositioningTableHeader->featureListOffset),
46 SWAPW(glyphPositioningTableHeader->lookupListOffset),
47 scriptTag,
48 languageTag,
49 featureMap,
50 featureMapCount,
51 featureOrder,
52 success
53 )
54{
55 // anything?
56}
57
58GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor()
59{
60}
61
62le_uint32 GlyphPositioningLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType,
63 GlyphIterator *glyphIterator,
64 const LEFontInstance *fontInstance,
65 LEErrorCode& success) const
66{
67 if (LE_FAILURE(success)) {
68 return 0;
69 }
70
71 le_uint32 delta = 0;
72
73 switch(lookupType)
74 {
75 case 0:
76 break;
77
78 case gpstSingle:
79 {
80 const SinglePositioningSubtable *subtable = (const SinglePositioningSubtable *) lookupSubtable;
81
82 delta = subtable->process(glyphIterator, fontInstance);
83 break;
84 }
85
86 case gpstPair:
87 {
88 const PairPositioningSubtable *subtable = (const PairPositioningSubtable *) lookupSubtable;
89
90 delta = subtable->process(glyphIterator, fontInstance);
91 break;
92 }
93
94 case gpstCursive:
95 {
96 const CursiveAttachmentSubtable *subtable = (const CursiveAttachmentSubtable *) lookupSubtable;
97
98 delta = subtable->process(glyphIterator, fontInstance);
99 break;
100 }
101
102 case gpstMarkToBase:
103 {
104 const MarkToBasePositioningSubtable *subtable = (const MarkToBasePositioningSubtable *) lookupSubtable;
105
106 delta = subtable->process(glyphIterator, fontInstance);
107 break;
108 }
109
110 case gpstMarkToLigature:
111 {
112 const MarkToLigaturePositioningSubtable *subtable = (const MarkToLigaturePositioningSubtable *) lookupSubtable;
113
114 delta = subtable->process(glyphIterator, fontInstance);
115 break;
116 }
117
118 case gpstMarkToMark:
119 {
120 const MarkToMarkPositioningSubtable *subtable = (const MarkToMarkPositioningSubtable *) lookupSubtable;
121
122 delta = subtable->process(glyphIterator, fontInstance);
123 break;
124 }
125
126 case gpstContext:
127 {
128 const ContextualPositioningSubtable *subtable = (const ContextualPositioningSubtable *) lookupSubtable;
129
130 delta = subtable->process(this, glyphIterator, fontInstance, success);
131 break;
132 }
133
134 case gpstChainedContext:
135 {
136 const ChainingContextualPositioningSubtable *subtable = (const ChainingContextualPositioningSubtable *) lookupSubtable;
137
138 delta = subtable->process(this, glyphIterator, fontInstance, success);
139 break;
140 }
141
142 case gpstExtension:
143 {
144 const ExtensionSubtable *subtable = (const ExtensionSubtable *) lookupSubtable;
145
146 delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
147 break;
148 }
149
150 default:
151 break;
152 }
153
154 return delta;
155}
156
157GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()
158{
159}
160
161U_NAMESPACE_END