os/textandloc/fontservices/textshaperplugin/IcuSource/layout/ArabicShaping.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/*
sl@0
     2
 *
sl@0
     3
 * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
sl@0
     4
 *
sl@0
     5
 */
sl@0
     6
sl@0
     7
#ifndef __ARABICSHAPING_H
sl@0
     8
#define __ARABICSHAPING_H
sl@0
     9
sl@0
    10
/**
sl@0
    11
 * \file
sl@0
    12
 * \internal
sl@0
    13
 */
sl@0
    14
sl@0
    15
#include "LETypes.h"
sl@0
    16
#include "OpenTypeTables.h"
sl@0
    17
sl@0
    18
U_NAMESPACE_BEGIN
sl@0
    19
sl@0
    20
class LEGlyphStorage;
sl@0
    21
sl@0
    22
class ArabicShaping /* not : public UObject because all methods are static */ {
sl@0
    23
public:
sl@0
    24
    // shaping bit masks
sl@0
    25
    enum ShapingBitMasks
sl@0
    26
    {
sl@0
    27
        MASK_SHAPE_RIGHT    = 1, // if this bit set, shapes to right
sl@0
    28
        MASK_SHAPE_LEFT     = 2, // if this bit set, shapes to left
sl@0
    29
        MASK_TRANSPARENT    = 4, // if this bit set, is transparent (ignore other bits)
sl@0
    30
        MASK_NOSHAPE        = 8  // if this bit set, don't shape this char, i.e. tatweel
sl@0
    31
    };
sl@0
    32
sl@0
    33
    // shaping values
sl@0
    34
    enum ShapeTypeValues
sl@0
    35
    {
sl@0
    36
        ST_NONE         = 0,
sl@0
    37
        ST_RIGHT        = MASK_SHAPE_RIGHT,
sl@0
    38
        ST_LEFT         = MASK_SHAPE_LEFT,
sl@0
    39
        ST_DUAL         = MASK_SHAPE_RIGHT | MASK_SHAPE_LEFT,
sl@0
    40
        ST_TRANSPARENT  = MASK_TRANSPARENT,
sl@0
    41
        ST_NOSHAPE_DUAL = MASK_NOSHAPE | ST_DUAL,
sl@0
    42
        ST_NOSHAPE_NONE = MASK_NOSHAPE
sl@0
    43
    };
sl@0
    44
sl@0
    45
    typedef le_int32 ShapeType;
sl@0
    46
sl@0
    47
    static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
sl@0
    48
                      le_bool rightToLeft, LEGlyphStorage &glyphStorage);
sl@0
    49
sl@0
    50
    static const LETag *getFeatureOrder();
sl@0
    51
sl@0
    52
private:
sl@0
    53
    // forbid instantiation
sl@0
    54
    ArabicShaping();
sl@0
    55
sl@0
    56
    static const LETag tagArray[];
sl@0
    57
sl@0
    58
    static ShapeType getShapeType(LEUnicode c);
sl@0
    59
sl@0
    60
    static const ShapeType shapeTypes[];
sl@0
    61
sl@0
    62
    static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage); 
sl@0
    63
};
sl@0
    64
sl@0
    65
U_NAMESPACE_END
sl@0
    66
#endif