3 * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
7 #ifndef __ARABICSHAPING_H
8 #define __ARABICSHAPING_H
16 #include "OpenTypeTables.h"
22 class ArabicShaping
/* not : public UObject because all methods are static */ {
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
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
57 typedef le_int32 ShapeType
;
59 static void shape(const LEUnicode
*chars
, le_int32 offset
, le_int32 charCount
, le_int32 charMax
,
60 le_bool rightToLeft
, LEGlyphStorage
&glyphStorage
);
62 static const FeatureMap
*getFeatureMap(le_int32
&count
);
65 // forbid instantiation
68 static ShapeType
getShapeType(LEUnicode c
);
70 static const le_uint8 shapingTypeTable
[];
71 static const size_t shapingTypeTableLen
;
73 static const ShapeType shapeTypes
[];
75 static void adjustTags(le_int32 outIndex
, le_int32 shapeOffset
, LEGlyphStorage
&glyphStorage
);