Home | History | Annotate | Download | only in layout
      1 /*
      2  * %W% %E%
      3  *
      4  * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
      5  *
      6  */
      7 
      8 #ifndef __LOOKUPPROCESSOR_H
      9 #define __LOOKUPPROCESSOR_H
     10 
     11 /**
     12  * \file
     13  * \internal
     14  */
     15 
     16 #include "LETypes.h"
     17 #include "LEFontInstance.h"
     18 #include "OpenTypeTables.h"
     19 #include "LETableReference.h"
     20 //#include "Lookups.h"
     21 //#include "Features.h"
     22 
     23 U_NAMESPACE_BEGIN
     24 
     25 class  LEFontInstance;
     26 class  LEGlyphStorage;
     27 class  GlyphIterator;
     28 class  GlyphPositionAdjustments;
     29 struct FeatureTable;
     30 struct FeatureListTable;
     31 struct GlyphDefinitionTableHeader;
     32 struct LookupSubtable;
     33 struct LookupTable;
     34 
     35 class LookupProcessor : public UMemory {
     36 public:
     37     le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
     38                  le_bool rightToLeft, const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, const LEFontInstance *fontInstance, LEErrorCode& success) const;
     39 
     40     le_uint32 applyLookupTable(const LEReferenceTo<LookupTable> &lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
     41 
     42     le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
     43 
     44     virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 subtableType,
     45         GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const = 0;
     46 
     47     virtual ~LookupProcessor();
     48 
     49     const LETableReference &getReference() const { return fReference; }
     50 
     51 protected:
     52     LookupProcessor(const LETableReference &baseAddress,
     53         Offset scriptListOffset,
     54         Offset featureListOffset,
     55         Offset lookupListOffset,
     56         LETag scriptTag,
     57         LETag languageTag,
     58         const FeatureMap *featureMap,
     59         le_int32 featureMapCount,
     60         le_bool orderFeatures,
     61         LEErrorCode& success);
     62 
     63     LookupProcessor();
     64 
     65     le_int32 selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success);
     66 
     67     LEReferenceTo<LookupListTable>   lookupListTable;
     68     LEReferenceTo<FeatureListTable>  featureListTable;
     69 
     70     FeatureMask            *lookupSelectArray;
     71     le_uint32              lookupSelectCount;
     72 
     73     le_uint16               *lookupOrderArray;
     74     le_uint32               lookupOrderCount;
     75 
     76     LETableReference        fReference;
     77 
     78 private:
     79 
     80     LookupProcessor(const LookupProcessor &other); // forbid copying of this class
     81     LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class
     82 };
     83 
     84 U_NAMESPACE_END
     85 #endif
     86