diff -r 000000000000 -r 1fb32624e06b fontservices/textshaperplugin/IcuSource/layout/ArabicShaping.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fontservices/textshaperplugin/IcuSource/layout/ArabicShaping.h Tue Feb 02 02:02:46 2010 +0200 @@ -0,0 +1,66 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * + */ + +#ifndef __ARABICSHAPING_H +#define __ARABICSHAPING_H + +/** + * \file + * \internal + */ + +#include "LETypes.h" +#include "OpenTypeTables.h" + +U_NAMESPACE_BEGIN + +class LEGlyphStorage; + +class ArabicShaping /* not : public UObject because all methods are static */ { +public: + // shaping bit masks + enum ShapingBitMasks + { + MASK_SHAPE_RIGHT = 1, // if this bit set, shapes to right + MASK_SHAPE_LEFT = 2, // if this bit set, shapes to left + MASK_TRANSPARENT = 4, // if this bit set, is transparent (ignore other bits) + MASK_NOSHAPE = 8 // if this bit set, don't shape this char, i.e. tatweel + }; + + // shaping values + enum ShapeTypeValues + { + ST_NONE = 0, + ST_RIGHT = MASK_SHAPE_RIGHT, + ST_LEFT = MASK_SHAPE_LEFT, + ST_DUAL = MASK_SHAPE_RIGHT | MASK_SHAPE_LEFT, + ST_TRANSPARENT = MASK_TRANSPARENT, + ST_NOSHAPE_DUAL = MASK_NOSHAPE | ST_DUAL, + ST_NOSHAPE_NONE = MASK_NOSHAPE + }; + + typedef le_int32 ShapeType; + + static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax, + le_bool rightToLeft, LEGlyphStorage &glyphStorage); + + static const LETag *getFeatureOrder(); + +private: + // forbid instantiation + ArabicShaping(); + + static const LETag tagArray[]; + + static ShapeType getShapeType(LEUnicode c); + + static const ShapeType shapeTypes[]; + + static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage); +}; + +U_NAMESPACE_END +#endif