| OLD | NEW |
| (Empty) |
| 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_ui
nt32 from, hb_uint32 len, HB_CharAttributes *attributes); | |
| 120 | |
| 121 extern void HB_IndicAttributes(HB_Script script, const HB_UChar16 *string, hb_ui
nt32 from, hb_uint32 len, HB_CharAttributes *attributes); | |
| 122 | |
| 123 extern void HB_ThaiAttributes(HB_Script script, const HB_UChar16 *string, hb_uin
t32 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 do
LogClusters); | |
| 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 | |
| OLD | NEW |