sl@0: /* sl@0: * %W% %E% sl@0: * sl@0: * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved sl@0: * sl@0: */ sl@0: sl@0: #ifndef __LOOKUPPROCESSOR_H sl@0: #define __LOOKUPPROCESSOR_H sl@0: sl@0: /** sl@0: * \file sl@0: * \internal sl@0: */ sl@0: sl@0: #include "LETypes.h" sl@0: #include "LEFontInstance.h" sl@0: #include "OpenTypeTables.h" sl@0: //#include "Lookups.h" sl@0: //#include "Features.h" sl@0: sl@0: U_NAMESPACE_BEGIN sl@0: sl@0: class LEFontInstance; sl@0: class LEGlyphStorage; sl@0: class GlyphIterator; sl@0: class GlyphPositionAdjustments; sl@0: struct FeatureTable; sl@0: struct FeatureListTable; sl@0: struct GlyphDefinitionTableHeader; sl@0: struct LookupSubtable; sl@0: struct LookupTable; sl@0: sl@0: class LookupProcessor : public UMemory { sl@0: public: sl@0: static const LETag notSelected; sl@0: static const LETag defaultFeature; sl@0: sl@0: le_bool isBogus(); sl@0: sl@0: le_int32 process(LEGlyphStorage &glyphStorage, sl@0: GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft, sl@0: const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, sl@0: const LEFontInstance *fontInstance, LEErrorCode& success) const; sl@0: sl@0: le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, sl@0: const LEFontInstance *fontInstance, LEErrorCode& success) const; sl@0: sl@0: le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, sl@0: const LEFontInstance *fontInstance, LEErrorCode& success) const; sl@0: sl@0: virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 subtableType, sl@0: GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, sl@0: LEErrorCode& success) const = 0; sl@0: sl@0: virtual ~LookupProcessor(); sl@0: sl@0: protected: sl@0: LookupProcessor(const char *baseAddress, sl@0: Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset, sl@0: LETag scriptTag, LETag languageTag, const LETag *featureOrder); sl@0: sl@0: LookupProcessor(); sl@0: sl@0: le_int32 selectLookups(const FeatureTable *featureTable, LETag featureTag, le_int32 order); sl@0: sl@0: const LookupListTable *lookupListTable; sl@0: const FeatureListTable *featureListTable; sl@0: sl@0: LETag *lookupSelectArray; sl@0: LETag requiredFeatureTag; sl@0: sl@0: le_uint16 *lookupOrderArray; sl@0: le_uint32 lookupOrderCount; sl@0: sl@0: private: sl@0: sl@0: LookupProcessor(const LookupProcessor &other); // forbid copying of this class sl@0: LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class sl@0: }; sl@0: sl@0: U_NAMESPACE_END sl@0: #endif