File: GlyphSubstLookupProc.cpp

package info (click to toggle)
icu 4.4.1-8%2Bsqueeze5
  • links: PTS
  • area: main
  • in suites: squeeze-lts
  • size: 89,548 kB
  • ctags: 42,307
  • sloc: cpp: 280,334; ansic: 185,805; xml: 8,983; makefile: 5,360; perl: 4,159; sh: 3,749; python: 286; sed: 33
file content (132 lines) | stat: -rw-r--r-- 3,703 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 *
 * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
 *
 */

#include "LETypes.h"
#include "LEGlyphFilter.h"
#include "LEFontInstance.h"
#include "OpenTypeTables.h"
#include "ICUFeatures.h"
#include "Lookups.h"
#include "ScriptAndLanguage.h"
#include "GlyphDefinitionTables.h"
#include "GlyphSubstitutionTables.h"
#include "SingleSubstitutionSubtables.h"
#include "MultipleSubstSubtables.h"
#include "AlternateSubstSubtables.h"
#include "LigatureSubstSubtables.h"
#include "ContextualSubstSubtables.h"
#include "ExtensionSubtables.h"
#include "LookupProcessor.h"
#include "GlyphSubstLookupProc.h"
#include "LESwaps.h"

U_NAMESPACE_BEGIN

GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor(
        const LEReferenceTo<GlyphSubstitutionTableHeader> &glyphSubstitutionTableHeader,
        LETag scriptTag, 
        LETag languageTag, 
        const LEGlyphFilter *filter, 
        const FeatureMap *featureMap, 
        le_int32 featureMapCount, 
        le_bool featureOrder,
        LEErrorCode& success)
    : LookupProcessor(
                      glyphSubstitutionTableHeader,
                      SWAPW(glyphSubstitutionTableHeader->scriptListOffset),
                      SWAPW(glyphSubstitutionTableHeader->featureListOffset),
                      SWAPW(glyphSubstitutionTableHeader->lookupListOffset),
                      scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success), fFilter(filter)
{
    // anything?
}

GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor()
{
}

le_uint32 GlyphSubstitutionLookupProcessor::applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType,
                                                       GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
{
    if (LE_FAILURE(success)) {
        return 0;
    }

    le_uint32 delta = 0;

    switch(lookupType)
    {
    case 0:
        break;

    case gsstSingle:
    {
        const LEReferenceTo<SingleSubstitutionSubtable> subtable(lookupSubtable, success);

        delta = subtable->process(subtable, glyphIterator, success, fFilter);
        break;
    }

    case gsstMultiple:
    {
        const LEReferenceTo<MultipleSubstitutionSubtable> subtable(lookupSubtable, success);

        delta = subtable->process(subtable, glyphIterator, success, fFilter);
        break;
    }

    case gsstAlternate:
    {
        const LEReferenceTo<AlternateSubstitutionSubtable> subtable(lookupSubtable, success);

        delta = subtable->process(subtable, glyphIterator, success, fFilter);
        break;
    }

    case gsstLigature:
    {
        const LEReferenceTo<LigatureSubstitutionSubtable> subtable(lookupSubtable, success);

        delta = subtable->process(subtable, glyphIterator, success, fFilter);
        break;
    }

    case gsstContext:
    {
        const LEReferenceTo<ContextualSubstitutionSubtable> subtable(lookupSubtable, success);

        delta = subtable->process(this, glyphIterator, fontInstance, success);
        break;
    }

    case gsstChainingContext:
    {
        const LEReferenceTo<ChainingContextualSubstitutionSubtable> subtable(lookupSubtable, success);

        delta = subtable->process(this, glyphIterator, fontInstance, success);
        break;
    }

    case gsstExtension:
    {
        const LEReferenceTo<ExtensionSubtable> subtable(lookupSubtable, success);

        delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
        break;
    }

    default:
        break;
    }

    return delta;
}

GlyphSubstitutionLookupProcessor::~GlyphSubstitutionLookupProcessor()
{
}

U_NAMESPACE_END