~ubuntu-branches/ubuntu/quantal/icu/quantal

« back to all changes in this revision

Viewing changes to source/layout/GlyphPosnLookupProc.cpp

  • Committer: Package Import Robot
  • Author(s): Yves Arrouye
  • Date: 2002-03-03 15:31:13 UTC
  • Revision ID: package-import@ubuntu.com-20020303153113-3ssceqlq45xbmbnc
Tags: upstream-2.0-2.1pre20020303
ImportĀ upstreamĀ versionĀ 2.0-2.1pre20020303

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * @(#)GlyphPosnLookupProc.cpp  1.6 00/03/15
 
3
 *
 
4
 * (C) Copyright IBM Corp. 1998, 1999, 2000, 2001 - All Rights Reserved
 
5
 *
 
6
 */
 
7
 
 
8
#include "LETypes.h"
 
9
#include "LEFontInstance.h"
 
10
#include "OpenTypeTables.h"
 
11
#include "Features.h"
 
12
#include "Lookups.h"
 
13
#include "ScriptAndLanguage.h"
 
14
#include "GlyphDefinitionTables.h"
 
15
#include "GlyphPositioningTables.h"
 
16
#include "SinglePositioningSubtables.h"
 
17
#include "PairPositioningSubtables.h"
 
18
//#include "CursivePositioningSubtables.h"
 
19
#include "MarkToBasePosnSubtables.h"
 
20
#include "MarkToLigaturePosnSubtables.h"
 
21
#include "MarkToMarkPosnSubtables.h"
 
22
//#include "ContextualPositioningSubtables.h"
 
23
#include "ContextualSubstSubtables.h"
 
24
#include "LookupProcessor.h"
 
25
#include "GlyphPosnLookupProc.h"
 
26
#include "LESwaps.h"
 
27
 
 
28
U_NAMESPACE_BEGIN
 
29
 
 
30
// Aside from the names, the contextual positioning subtables are
 
31
// the same as the contextual substitution subtables.
 
32
typedef ContextualSubstitutionSubtable ContextualPositioningSubtable;
 
33
typedef ChainingContextualSubstitutionSubtable ChainingContextualPositioningSubtable;
 
34
 
 
35
GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
 
36
        const GlyphPositioningTableHeader *glyphPositioningTableHeader,
 
37
        LETag scriptTag, LETag languageTag, const LETag *featureOrder)
 
38
    : LookupProcessor(
 
39
                      (char *) glyphPositioningTableHeader,
 
40
                      SWAPW(glyphPositioningTableHeader->scriptListOffset),
 
41
                      SWAPW(glyphPositioningTableHeader->featureListOffset),
 
42
                      SWAPW(glyphPositioningTableHeader->lookupListOffset),
 
43
                      scriptTag, languageTag, featureOrder)
 
44
{
 
45
    // anything?
 
46
}
 
47
 
 
48
GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor()
 
49
{
 
50
}
 
51
 
 
52
le_uint32 GlyphPositioningLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType,
 
53
                                                       GlyphIterator *glyphIterator,
 
54
                                                       const LEFontInstance *fontInstance) const
 
55
{
 
56
    le_uint32 delta = 0;
 
57
 
 
58
    switch(lookupType)
 
59
    {
 
60
    case 0:
 
61
        break;
 
62
 
 
63
    case gpstSingle:
 
64
    {
 
65
        const SinglePositioningSubtable *subtable = (const SinglePositioningSubtable *) lookupSubtable;
 
66
 
 
67
        delta = subtable->process(glyphIterator, fontInstance);
 
68
        break;
 
69
    }
 
70
 
 
71
    case gpstPair:
 
72
    {
 
73
        const PairPositioningSubtable *subtable = (const PairPositioningSubtable *) lookupSubtable;
 
74
 
 
75
        delta = subtable->process(glyphIterator, fontInstance);
 
76
        break;
 
77
    }
 
78
 
 
79
#if 0
 
80
    case gpstCursive:
 
81
    {
 
82
        const CursivePositioningSubtable *subtable = (const CursivePositioningSubtable *) lookupSubtable;
 
83
 
 
84
        delta = subtable->process(glyphIterator, fontInstance);
 
85
        break;
 
86
    }
 
87
#endif
 
88
 
 
89
    case gpstMarkToBase:
 
90
    {
 
91
        const MarkToBasePositioningSubtable *subtable = (const MarkToBasePositioningSubtable *) lookupSubtable;
 
92
 
 
93
        delta = subtable->process(glyphIterator, fontInstance);
 
94
        break;
 
95
    }
 
96
 
 
97
     case gpstMarkToLigature:
 
98
    {
 
99
        const MarkToLigaturePositioningSubtable *subtable = (const MarkToLigaturePositioningSubtable *) lookupSubtable;
 
100
 
 
101
        delta = subtable->process(glyphIterator, fontInstance);
 
102
        break;
 
103
    }
 
104
 
 
105
    case gpstMarkToMark:
 
106
    {
 
107
        const MarkToMarkPositioningSubtable *subtable = (const MarkToMarkPositioningSubtable *) lookupSubtable;
 
108
 
 
109
        delta = subtable->process(glyphIterator, fontInstance);
 
110
        break;
 
111
    }
 
112
 
 
113
   case gpstContext:
 
114
    {
 
115
        const ContextualPositioningSubtable *subtable = (const ContextualPositioningSubtable *) lookupSubtable;
 
116
 
 
117
        delta = subtable->process(this, glyphIterator, fontInstance);
 
118
        break;
 
119
    }
 
120
 
 
121
    case gpstChainedContext:
 
122
    {
 
123
        const ChainingContextualPositioningSubtable *subtable = (const ChainingContextualPositioningSubtable *) lookupSubtable;
 
124
 
 
125
        delta = subtable->process(this, glyphIterator, fontInstance);
 
126
        break;
 
127
    }
 
128
 
 
129
    default:
 
130
        break;
 
131
    }
 
132
 
 
133
    return delta;
 
134
}
 
135
 
 
136
GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()
 
137
{
 
138
}
 
139
 
 
140
U_NAMESPACE_END