Home | History | Annotate | Download | only in hb-old
      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 
     97 typedef struct {
     98     HB_ShapeFunction shape;
     99 } HB_ScriptEngine;
    100 
    101 extern const HB_ScriptEngine hb_scriptEngines[];
    102 
    103 extern HB_Bool HB_BasicShape(HB_ShaperItem *shaper_item);
    104 extern HB_Bool HB_GreekShape(HB_ShaperItem *shaper_item);
    105 extern HB_Bool HB_TibetanShape(HB_ShaperItem *shaper_item);
    106 extern HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item);
    107 extern HB_Bool HB_ArabicShape(HB_ShaperItem *shaper_item);
    108 extern HB_Bool HB_HangulShape(HB_ShaperItem *shaper_item);
    109 extern HB_Bool HB_MyanmarShape(HB_ShaperItem *shaper_item);
    110 extern HB_Bool HB_KhmerShape(HB_ShaperItem *shaper_item);
    111 extern HB_Bool HB_IndicShape(HB_ShaperItem *shaper_item);
    112 
    113 typedef struct {
    114     hb_uint32 tag;
    115     hb_uint32 property;
    116 } HB_OpenTypeFeature;
    117 
    118 #define PositioningProperties 0x80000000
    119 
    120 HB_Bool HB_SelectScript(HB_ShaperItem *item, const HB_OpenTypeFeature *features);
    121 
    122 HB_Bool HB_OpenTypeShape(HB_ShaperItem *item, const hb_uint32 *properties);
    123 HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool doLogClusters);
    124 
    125 void HB_HeuristicPosition(HB_ShaperItem *item);
    126 void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item);
    127 
    128 #define HB_IsControlChar(uc) \
    129     ((uc >= 0x200b && uc <= 0x200f /* ZW Space, ZWNJ, ZWJ, LRM and RLM */) \
    130      || (uc >= 0x2028 && uc <= 0x202f /* LS, PS, LRE, RLE, PDF, LRO, RLO, NNBSP */) \
    131      || (uc >= 0x206a && uc <= 0x206f /* ISS, ASS, IAFS, AFS, NADS, NODS */))
    132 
    133 HB_Bool HB_ConvertStringToGlyphIndices(HB_ShaperItem *shaper_item);
    134 
    135 #define HB_GetGlyphAdvances(shaper_item) \
    136     shaper_item->font->klass->getGlyphAdvances(shaper_item->font, \
    137                                                shaper_item->glyphs, shaper_item->num_glyphs, \
    138                                                shaper_item->advances, \
    139                                                shaper_item->face->current_flags);
    140 
    141 #define HB_DECLARE_STACKARRAY(Type, Name) \
    142     Type stack##Name[512]; \
    143     Type *Name = stack##Name;
    144 
    145 #define HB_INIT_STACKARRAY(Type, Name, Length) \
    146     if ((Length) >= 512) \
    147         Name = (Type *)malloc((Length) * sizeof(Type));
    148 
    149 #define HB_STACKARRAY(Type, Name, Length) \
    150     HB_DECLARE_STACKARRAY(Type, Name) \
    151     HB_INIT_STACKARRAY(Type, Name, Length)
    152 
    153 #define HB_FREE_STACKARRAY(Name) \
    154     if (stack##Name != Name) \
    155         free(Name);
    156 
    157 HB_END_HEADER
    158 
    159 #endif
    160