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