• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 Nokia Corporation 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 
115 extern void HB_TibetanAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
116 
117 extern void HB_MyanmarAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
118 
119 extern void HB_KhmerAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
120 
121 extern void HB_IndicAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
122 
123 extern void HB_ThaiAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
124 
125 typedef struct {
126     hb_uint32 tag;
127     hb_uint32 property;
128 } HB_OpenTypeFeature;
129 
130 #define PositioningProperties 0x80000000
131 
132 HB_Bool HB_SelectScript(HB_ShaperItem *item, const HB_OpenTypeFeature *features);
133 
134 HB_Bool HB_OpenTypeShape(HB_ShaperItem *item, const hb_uint32 *properties);
135 HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool doLogClusters);
136 
137 void HB_HeuristicPosition(HB_ShaperItem *item);
138 void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item);
139 
140 #define HB_IsControlChar(uc) \
141     ((uc >= 0x200b && uc <= 0x200f /* ZW Space, ZWNJ, ZWJ, LRM and RLM */) \
142      || (uc >= 0x2028 && uc <= 0x202f /* LS, PS, LRE, RLE, PDF, LRO, RLO, NNBSP */) \
143      || (uc >= 0x206a && uc <= 0x206f /* ISS, ASS, IAFS, AFS, NADS, NODS */))
144 
145 HB_Bool HB_ConvertStringToGlyphIndices(HB_ShaperItem *shaper_item);
146 
147 #define HB_GetGlyphAdvances(shaper_item) \
148     shaper_item->font->klass->getGlyphAdvances(shaper_item->font, \
149                                                shaper_item->glyphs, shaper_item->num_glyphs, \
150                                                shaper_item->advances, \
151                                                shaper_item->face->current_flags);
152 
153 #define HB_DECLARE_STACKARRAY(Type, Name) \
154     Type stack##Name[512]; \
155     Type *Name = stack##Name;
156 
157 #define HB_INIT_STACKARRAY(Type, Name, Length) \
158     if ((Length) >= 512) \
159         Name = (Type *)malloc((Length) * sizeof(Type));
160 
161 #define HB_STACKARRAY(Type, Name, Length) \
162     HB_DECLARE_STACKARRAY(Type, Name) \
163     HB_INIT_STACKARRAY(Type, Name, Length)
164 
165 #define HB_FREE_STACKARRAY(Name) \
166     if (stack##Name != Name) \
167         free(Name);
168 
169 HB_END_HEADER
170 
171 #endif
172