00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __ARABICLAYOUTENGINE_H
00010 #define __ARABICLAYOUTENGINE_H
00011
00012 #include "LETypes.h"
00013 #include "LEFontInstance.h"
00014 #include "LEGlyphFilter.h"
00015 #include "LayoutEngine.h"
00016 #include "OpenTypeLayoutEngine.h"
00017
00018 #include "GlyphSubstitutionTables.h"
00019 #include "GlyphDefinitionTables.h"
00020 #include "GlyphPositioningTables.h"
00021
00022 U_NAMESPACE_BEGIN
00023
00032 class ArabicOpenTypeLayoutEngine : public OpenTypeLayoutEngine
00033 {
00034 public:
00052 ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
00053 const GlyphSubstitutionTableHeader *gsubTable);
00054
00068 ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode);
00069
00075 virtual ~ArabicOpenTypeLayoutEngine();
00076
00082 virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
00083
00089 static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
00090
00091 protected:
00092
00114 virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
00115 LEUnicode *&outChars, le_int32 *&charIndices, const LETag **&featureTags, LEErrorCode &success);
00116
00134 virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphID glyphs[], le_int32 glyphCount, float positions[], LEErrorCode &success);
00135
00136 private:
00137
00142 static const char fgClassID;
00143 };
00144
00157 class UnicodeArabicOpenTypeLayoutEngine : public ArabicOpenTypeLayoutEngine
00158 {
00159 public:
00173 UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode);
00174
00180 virtual ~UnicodeArabicOpenTypeLayoutEngine();
00181
00182 protected:
00183
00202 virtual le_int32 glyphPostProcessing(LEGlyphID tempGlyphs[], le_int32 tempCharIndices[], le_int32 tempGlyphCount,
00203 LEGlyphID *&glyphs, le_int32 *&charIndices, LEErrorCode &success);
00204
00223 virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
00224 LEGlyphID *&glyphs, le_int32 *&charIndices, LEErrorCode &success);
00225
00242 virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphID glyphs[], le_int32 glyphCount, float positions[], LEErrorCode &success);
00243 };
00244
00245 U_NAMESPACE_END
00246 #endif
00247