00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __OPENTYPELAYOUTENGINE_H
00010 #define __OPENTYPELAYOUTENGINE_H
00011
00012 #include "LETypes.h"
00013 #include "LEGlyphFilter.h"
00014 #include "LEFontInstance.h"
00015 #include "LayoutEngine.h"
00016
00017 #include "GlyphSubstitutionTables.h"
00018 #include "GlyphDefinitionTables.h"
00019 #include "GlyphPositioningTables.h"
00020
00021 U_NAMESPACE_BEGIN
00022
00048 class OpenTypeLayoutEngine : public LayoutEngine
00049 {
00050 public:
00067 OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
00068 const GlyphSubstitutionTableHeader *gsubTable);
00069
00080 OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode);
00081
00087 virtual ~OpenTypeLayoutEngine();
00088
00099 static LETag getScriptTag(le_int32 scriptCode);
00100
00111 static LETag getLangSysTag(le_int32 languageCode);
00112
00118 virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
00119
00125 static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
00126
00127 private:
00128
00133 void setScriptAndLanguageTags();
00134
00138 static const LETag scriptTags[];
00139
00143 static const LETag languageTags[];
00144
00149 static const char fgClassID;
00150
00151 protected:
00159 const LETag **fFeatureTags;
00160
00168 const LETag *fFeatureOrder;
00169
00175 const GlyphSubstitutionTableHeader *fGSUBTable;
00176
00182 const GlyphDefinitionTableHeader *fGDEFTable;
00183
00189 const GlyphPositioningTableHeader *fGPOSTable;
00190
00199 LEGlyphFilter *fSubstitutionFilter;
00200
00206 LETag fScriptTag;
00207
00213 LETag fLangSysTag;
00214
00240 virtual le_int32 characterProcessing(const LEUnicode [], le_int32 offset, le_int32 count, le_int32 max, le_bool ,
00241 LEUnicode *&, le_int32 *&, const LETag **&, LEErrorCode &success);
00242
00272 virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
00273 const LETag **&featureTags, LEGlyphID *&glyphs, le_int32 *&charIndices, LEErrorCode &success);
00274
00300 virtual le_int32 glyphPostProcessing(LEGlyphID tempGlyphs[], le_int32 tempCharIndices[], le_int32 tempGlyphCount,
00301 LEGlyphID *&glyphs, le_int32 *&charIndices, LEErrorCode &success);
00302
00325 virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphID *&glyphs, le_int32 *&charIndices, LEErrorCode &success);
00326
00342 virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphID glyphs[], le_int32 glyphCount, float positions[], LEErrorCode &success);
00343
00351 virtual void reset();
00352 };
00353
00354 U_NAMESPACE_END
00355 #endif
00356