~ubuntu-branches/ubuntu/wily/qtbase-opensource-src/wily

« back to all changes in this revision

Viewing changes to src/3rdparty/harfbuzz/src/harfbuzz-shaper-private.h

  • Committer: Package Import Robot
  • Author(s): Timo Jyrinki
  • Date: 2013-02-05 12:46:17 UTC
  • Revision ID: package-import@ubuntu.com-20130205124617-c8jouts182j002fx
Tags: upstream-5.0.1+dfsg
ImportĀ upstreamĀ versionĀ 5.0.1+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies)
 
3
 *
 
4
 * This is part of HarfBuzz, an OpenType Layout engine library.
 
5
 *
 
6
 * Permission is hereby granted, without written agreement and without
 
7
 * license or royalty fees, to use, copy, modify, and distribute this
 
8
 * software and its documentation for any purpose, provided that the
 
9
 * above copyright notice and the following two paragraphs appear in
 
10
 * all copies of this software.
 
11
 *
 
12
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
 
13
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
 
14
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
 
15
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 
16
 * DAMAGE.
 
17
 *
 
18
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
 
19
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 
20
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 
21
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
 
22
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 
23
 */
 
24
 
 
25
#ifndef HARFBUZZ_SHAPER_PRIVATE_H
 
26
#define HARFBUZZ_SHAPER_PRIVATE_H
 
27
 
 
28
HB_BEGIN_HEADER
 
29
 
 
30
enum {
 
31
    C_DOTTED_CIRCLE = 0x25CC
 
32
};
 
33
 
 
34
typedef enum 
 
35
{
 
36
    HB_Combining_BelowLeftAttached       = 200,
 
37
    HB_Combining_BelowAttached           = 202,
 
38
    HB_Combining_BelowRightAttached      = 204,
 
39
    HB_Combining_LeftAttached            = 208,
 
40
    HB_Combining_RightAttached           = 210,
 
41
    HB_Combining_AboveLeftAttached       = 212,
 
42
    HB_Combining_AboveAttached           = 214,
 
43
    HB_Combining_AboveRightAttached      = 216,
 
44
 
 
45
    HB_Combining_BelowLeft               = 218,
 
46
    HB_Combining_Below                   = 220,
 
47
    HB_Combining_BelowRight              = 222,
 
48
    HB_Combining_Left                    = 224,
 
49
    HB_Combining_Right                   = 226,
 
50
    HB_Combining_AboveLeft               = 228,
 
51
    HB_Combining_Above                   = 230,
 
52
    HB_Combining_AboveRight              = 232,
 
53
 
 
54
    HB_Combining_DoubleBelow             = 233,
 
55
    HB_Combining_DoubleAbove             = 234,
 
56
    HB_Combining_IotaSubscript           = 240
 
57
} HB_CombiningClass;
 
58
 
 
59
typedef enum {
 
60
    LocaProperty = 0x1,
 
61
    CcmpProperty = 0x2,
 
62
    InitProperty = 0x4,
 
63
    IsolProperty = 0x8,
 
64
    FinaProperty = 0x10,
 
65
    MediProperty = 0x20,
 
66
    RligProperty = 0x40,
 
67
    CaltProperty = 0x80,
 
68
    LigaProperty = 0x100,
 
69
    DligProperty = 0x200,
 
70
    CswhProperty = 0x400,
 
71
    MsetProperty = 0x800,
 
72
 
 
73
    /* used by indic and myanmar shaper */
 
74
    NuktaProperty = 0x8,
 
75
    AkhantProperty = 0x10,
 
76
    RephProperty = 0x20,
 
77
    PreFormProperty = 0x40,
 
78
    BelowFormProperty = 0x80,
 
79
    AboveFormProperty = 0x100,
 
80
    HalfFormProperty = 0x200,
 
81
    PostFormProperty = 0x400,
 
82
    ConjunctFormProperty = 0x800,
 
83
    VattuProperty = 0x1000,
 
84
    PreSubstProperty = 0x2000,
 
85
    BelowSubstProperty = 0x4000,
 
86
    AboveSubstProperty = 0x8000,
 
87
    PostSubstProperty = 0x10000,
 
88
    HalantProperty = 0x20000,
 
89
    CligProperty = 0x40000,
 
90
    IndicCaltProperty = 0x80000
 
91
 
 
92
} HB_OpenTypeProperty;
 
93
 
 
94
/* return true if ok. */
 
95
typedef HB_Bool (*HB_ShapeFunction)(HB_ShaperItem *shaper_item);
 
96
typedef void (*HB_AttributeFunction)(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
 
97
 
 
98
typedef struct {
 
99
    HB_ShapeFunction shape;
 
100
    HB_AttributeFunction charAttributes;
 
101
} HB_ScriptEngine;
 
102
 
 
103
extern const HB_ScriptEngine hb_scriptEngines[];
 
104
 
 
105
extern HB_Bool HB_BasicShape(HB_ShaperItem *shaper_item);
 
106
extern HB_Bool HB_GreekShape(HB_ShaperItem *shaper_item);
 
107
extern HB_Bool HB_TibetanShape(HB_ShaperItem *shaper_item);
 
108
extern HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item);
 
109
extern HB_Bool HB_ArabicShape(HB_ShaperItem *shaper_item);
 
110
extern HB_Bool HB_HangulShape(HB_ShaperItem *shaper_item);
 
111
extern HB_Bool HB_MyanmarShape(HB_ShaperItem *shaper_item);
 
112
extern HB_Bool HB_KhmerShape(HB_ShaperItem *shaper_item);
 
113
extern HB_Bool HB_IndicShape(HB_ShaperItem *shaper_item);
 
114
extern HB_Bool HB_ThaiShape(HB_ShaperItem *shaper_item);
 
115
 
 
116
extern void HB_TibetanAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
 
117
 
 
118
extern void HB_MyanmarAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
 
119
 
 
120
extern void HB_KhmerAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
 
121
 
 
122
extern void HB_IndicAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
 
123
 
 
124
extern void HB_ThaiAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
 
125
 
 
126
#ifndef NO_OPENTYPE
 
127
typedef struct {
 
128
    hb_uint32 tag;
 
129
    hb_uint32 property;
 
130
} HB_OpenTypeFeature;
 
131
 
 
132
#define PositioningProperties 0x80000000
 
133
 
 
134
HB_Bool HB_SelectScript(HB_ShaperItem *item, const HB_OpenTypeFeature *features);
 
135
 
 
136
HB_Bool HB_OpenTypeShape(HB_ShaperItem *item, const hb_uint32 *properties);
 
137
HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool doLogClusters);
 
138
#endif // NO_OPENTYPE
 
139
 
 
140
void HB_HeuristicPosition(HB_ShaperItem *item);
 
141
void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item);
 
142
 
 
143
#define HB_IsControlChar(uc) \
 
144
    ((uc >= 0x200b && uc <= 0x200f /* ZW Space, ZWNJ, ZWJ, LRM and RLM */) \
 
145
     || (uc >= 0x2028 && uc <= 0x202f /* LS, PS, LRE, RLE, PDF, LRO, RLO, NNBSP */) \
 
146
     || (uc >= 0x206a && uc <= 0x206f /* ISS, ASS, IAFS, AFS, NADS, NODS */))
 
147
 
 
148
HB_Bool HB_ConvertStringToGlyphIndices(HB_ShaperItem *shaper_item);
 
149
 
 
150
#define HB_GetGlyphAdvances(shaper_item) \
 
151
    shaper_item->font->klass->getGlyphAdvances(shaper_item->font, \
 
152
                                               shaper_item->glyphs, shaper_item->num_glyphs, \
 
153
                                               shaper_item->advances, \
 
154
                                               shaper_item->face->current_flags);
 
155
 
 
156
#define HB_DECLARE_STACKARRAY(Type, Name) \
 
157
    Type stack##Name[512]; \
 
158
    Type *Name = stack##Name;
 
159
 
 
160
#define HB_INIT_STACKARRAY(Type, Name, Length) \
 
161
    if ((Length) >= 512) \
 
162
        Name = (Type *)malloc((Length) * sizeof(Type));
 
163
 
 
164
#define HB_STACKARRAY(Type, Name, Length) \
 
165
    HB_DECLARE_STACKARRAY(Type, Name) \
 
166
    HB_INIT_STACKARRAY(Type, Name, Length)
 
167
 
 
168
#define HB_FREE_STACKARRAY(Name) \
 
169
    if (stack##Name != Name) \
 
170
        free(Name);
 
171
 
 
172
HB_END_HEADER
 
173
 
 
174
#endif