• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
4  *
5  */
6 
7 #ifndef __ARABICSHAPING_H
8 #define __ARABICSHAPING_H
9 
10 /**
11  * \file
12  * \internal
13  */
14 
15 #include "LETypes.h"
16 #include "OpenTypeTables.h"
17 
18 U_NAMESPACE_BEGIN
19 
20 class LEGlyphStorage;
21 
22 class ArabicShaping /* not : public UObject because all methods are static */ {
23 public:
24     // Joining types
25     enum JoiningTypes
26     {
27         JT_NON_JOINING   = 0,
28         JT_JOIN_CAUSING  = 1,
29         JT_DUAL_JOINING  = 2,
30         JT_LEFT_JOINING  = 3,
31         JT_RIGHT_JOINING = 4,
32         JT_TRANSPARENT   = 5,
33         JT_COUNT         = 6
34     };
35 
36     // shaping bit masks
37     enum ShapingBitMasks
38     {
39         MASK_SHAPE_RIGHT    = 1, // if this bit set, shapes to right
40         MASK_SHAPE_LEFT     = 2, // if this bit set, shapes to left
41         MASK_TRANSPARENT    = 4, // if this bit set, is transparent (ignore other bits)
42         MASK_NOSHAPE        = 8  // if this bit set, don't shape this char, i.e. tatweel
43     };
44 
45     // shaping values
46     enum ShapeTypeValues
47     {
48         ST_NONE         = 0,
49         ST_RIGHT        = MASK_SHAPE_RIGHT,
50         ST_LEFT         = MASK_SHAPE_LEFT,
51         ST_DUAL         = MASK_SHAPE_RIGHT | MASK_SHAPE_LEFT,
52         ST_TRANSPARENT  = MASK_TRANSPARENT,
53         ST_NOSHAPE_DUAL = MASK_NOSHAPE | ST_DUAL,
54         ST_NOSHAPE_NONE = MASK_NOSHAPE
55     };
56 
57     typedef le_int32 ShapeType;
58 
59     static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
60                       le_bool rightToLeft, LEGlyphStorage &glyphStorage);
61 
62     static const FeatureMap *getFeatureMap(le_int32 &count);
63 
64 private:
65     // forbid instantiation
66     ArabicShaping();
67 
68     static ShapeType getShapeType(LEUnicode c);
69 
70     static const le_uint8 shapingTypeTable[];
71     static const size_t   shapingTypeTableLen;
72 
73     static const ShapeType shapeTypes[];
74 
75     static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage);
76 };
77 
78 U_NAMESPACE_END
79 #endif
80