Home | History | Annotate | Download | only in src
      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     CcmpProperty = 0x1,
     61     InitProperty = 0x2,
     62     IsolProperty = 0x4,
     63     FinaProperty = 0x8,
     64     MediProperty = 0x10,
     65     RligProperty = 0x20,
     66     CaltProperty = 0x40,
     67     LigaProperty = 0x80,
     68     DligProperty = 0x100,
     69     CswhProperty = 0x200,
     70     MsetProperty = 0x400,
     71 
     72     /* used by indic and myanmar shaper */
     73     NuktaProperty = 0x4,
     74     AkhantProperty = 0x8,
     75     RephProperty = 0x10,
     76     PreFormProperty = 0x20,
     77     BelowFormProperty = 0x40,
     78     AboveFormProperty = 0x80,
     79     HalfFormProperty = 0x100,
     80     PostFormProperty = 0x200,
     81     VattuProperty = 0x400,
     82     PreSubstProperty = 0x800,
     83     BelowSubstProperty = 0x1000,
     84     AboveSubstProperty = 0x2000,
     85     PostSubstProperty = 0x4000,
     86     HalantProperty = 0x8000,
     87     CligProperty = 0x10000
     88 
     89 } HB_OpenTypeProperty;
     90 
     91 /* return true if ok. */
     92 typedef HB_Bool (*HB_ShapeFunction)(HB_ShaperItem *shaper_item);
     93 typedef void (*HB_AttributeFunction)(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
     94 
     95 typedef struct {
     96     HB_ShapeFunction shape;
     97     HB_AttributeFunction charAttributes;
     98 } HB_ScriptEngine;
     99 
    100 extern const HB_ScriptEngine hb_scriptEngines[];
    101 
    102 extern HB_Bool HB_BasicShape(HB_ShaperItem *shaper_item);
    103 extern HB_Bool HB_TibetanShape(HB_ShaperItem *shaper_item);
    104 extern HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item);
    105 extern HB_Bool HB_ArabicShape(HB_ShaperItem *shaper_item);
    106 extern HB_Bool HB_HangulShape(HB_ShaperItem *shaper_item);
    107 extern HB_Bool HB_MyanmarShape(HB_ShaperItem *shaper_item);
    108 extern HB_Bool HB_KhmerShape(HB_ShaperItem *shaper_item);
    109 extern HB_Bool HB_IndicShape(HB_ShaperItem *shaper_item);
    110 
    111 extern void HB_TibetanAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
    112 
    113 extern void HB_MyanmarAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
    114 
    115 extern void HB_KhmerAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
    116 
    117 extern void HB_IndicAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
    118 
    119 extern void HB_ThaiAttributes(HB_Script script, const HB_UChar16 *string, hb_uint32 from, hb_uint32 len, HB_CharAttributes *attributes);
    120 
    121 typedef struct {
    122     hb_uint32 tag;
    123     hb_uint32 property;
    124 } HB_OpenTypeFeature;
    125 
    126 #define PositioningProperties 0x80000000
    127 
    128 HB_Bool HB_SelectScript(HB_ShaperItem *item, const HB_OpenTypeFeature *features);
    129 
    130 HB_Bool HB_OpenTypeShape(HB_ShaperItem *item, const hb_uint32 *properties);
    131 HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool doLogClusters);
    132 
    133 void HB_HeuristicPosition(HB_ShaperItem *item);
    134 void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item);
    135 
    136 #define HB_IsControlChar(uc) \
    137     ((uc >= 0x200b && uc <= 0x200f /* ZW Space, ZWNJ, ZWJ, LRM and RLM */) \
    138      || (uc >= 0x2028 && uc <= 0x202f /* LS, PS, LRE, RLE, PDF, LRO, RLO, NNBSP */) \
    139      || (uc >= 0x206a && uc <= 0x206f /* ISS, ASS, IAFS, AFS, NADS, NODS */))
    140 
    141 HB_Bool HB_ConvertStringToGlyphIndices(HB_ShaperItem *shaper_item);
    142 
    143 #define HB_GetGlyphAdvances(shaper_item) \
    144     shaper_item->font->klass->getGlyphAdvances(shaper_item->font, \
    145                                                shaper_item->glyphs, shaper_item->num_glyphs, \
    146                                                shaper_item->advances, \
    147                                                shaper_item->face->current_flags);
    148 
    149 #define HB_DECLARE_STACKARRAY(Type, Name) \
    150     Type stack##Name[512]; \
    151     Type *Name = stack##Name;
    152 
    153 #define HB_INIT_STACKARRAY(Type, Name, Length) \
    154     if ((Length) >= 512) \
    155         Name = (Type *)malloc((Length) * sizeof(Type));
    156 
    157 #define HB_STACKARRAY(Type, Name, Length) \
    158     HB_DECLARE_STACKARRAY(Type, Name) \
    159     HB_INIT_STACKARRAY(Type, Name, Length)
    160 
    161 #define HB_FREE_STACKARRAY(Name) \
    162     if (stack##Name != Name) \
    163         free(Name);
    164 
    165 HB_END_HEADER
    166 
    167 #endif
    168