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
00044 class OpenTypeLayoutEngine : public LayoutEngine
00045 {
00046 public:
00061 OpenTypeLayoutEngine(LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
00062 GlyphSubstitutionTableHeader *gsubTable);
00063
00072 OpenTypeLayoutEngine(LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode);
00073
00077 virtual ~OpenTypeLayoutEngine();
00078
00087 static LETag getScriptTag(le_int32 scriptCode);
00088
00097 static LETag getLangSysTag(le_int32 languageCode);
00098
00099 private:
00100
00105 void setScriptAndLanguageTags();
00106
00107 protected:
00113 const LETag **fFeatureTags;
00114
00118 GlyphSubstitutionTableHeader *fGSUBTable;
00119
00123 GlyphDefinitionTableHeader *fGDEFTable;
00124
00128 GlyphPositioningTableHeader *fGPOSTable;
00129
00136 LEGlyphFilter *fSubstitutionFilter;
00137
00141 LETag fScriptTag;
00142
00146 LETag fLangSysTag;
00147
00170 virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
00171 LEUnicode *&outChars, le_int32 *&charIndices, const LETag **&featureTags)
00172 {
00173 return count;
00174 };
00175
00202 virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
00203 const LETag **featureTags, LEGlyphID *&glyphs, le_int32 *&charIndices);
00204
00227 virtual le_int32 glyphPostProcessing(LEGlyphID tempGlyphs[], le_int32 tempCharIndices[], le_int32 tempGlyphCount,
00228 LEGlyphID *&glyphs, le_int32 *&charIndices)
00229 {
00230 glyphs = tempGlyphs;
00231 charIndices = tempCharIndices;
00232
00233 return tempGlyphCount;
00234 };
00235
00255 virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphID *&glyphs, le_int32 *&charIndices);
00256
00269 virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphID glyphs[], le_int32 glyphCount, float positions[]);
00270
00276 virtual void reset();
00277 };
00278
00279 #endif
00280