]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/layout/LookupProcessor.h
ICU-57166.0.1.tar.gz
[apple/icu.git] / icuSources / layout / LookupProcessor.h
index e8257e9e7685fd377581f36544e6f295a7d0a3cb..a9c5ab480df59c959d6522258b1b27d016244bfd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * %W% %E%
  *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1998-2016 - All Rights Reserved
  *
  */
 
 #include "LETypes.h"
 #include "LEFontInstance.h"
 #include "OpenTypeTables.h"
+#include "LETableReference.h"
 #include "Lookups.h"
-#include "Features.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositionAdjustments.h"
-#include "GlyphIterator.h"
 
 U_NAMESPACE_BEGIN
 
-class LEGlyphStorage;
+class  LEFontInstance;
+class  LEGlyphStorage;
+class  GlyphIterator;
+class  GlyphPositionAdjustments;
+struct FeatureTable;
+struct FeatureListTable;
+struct GlyphDefinitionTableHeader;
+struct LookupSubtable;
 
 class LookupProcessor : public UMemory {
 public:
-    static const LETag notSelected;
-    static const LETag defaultFeature;
+    le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
+                 le_bool rightToLeft, const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, const LEFontInstance *fontInstance, LEErrorCode& success) const;
 
-    le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustment *glyphPositionAdjustments,
-                 le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance) const;
+    le_uint32 applyLookupTable(const LEReferenceTo<LookupTable> &lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
 
-    le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+    le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
 
-    le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
-
-    virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 subtableType,
-        GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const = 0;
+    virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 subtableType,
+        GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const = 0;
 
     virtual ~LookupProcessor();
 
+    const LETableReference &getReference() const { return fReference; }
+
 protected:
-    LookupProcessor(const char *baseAddress,
-        Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
-        LETag scriptTag, LETag languageTag, const LETag *featureOrder);
+    LookupProcessor(const LETableReference &baseAddress,
+        Offset scriptListOffset, 
+        Offset featureListOffset, 
+        Offset lookupListOffset,
+        LETag scriptTag, 
+        LETag languageTag, 
+        const FeatureMap *featureMap, 
+        le_int32 featureMapCount, 
+        le_bool orderFeatures, 
+        LEErrorCode& success);
 
     LookupProcessor();
 
-    le_int32 selectLookups(const FeatureTable *featureTable, LETag featureTag, le_int32 order);
+    le_int32 selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success);
 
-    const LookupListTable   *lookupListTable;
-    const FeatureListTable  *featureListTable;
+    LEReferenceTo<LookupListTable>   lookupListTable;
+    LEReferenceTo<FeatureListTable>  featureListTable;
 
-    LETag                   *lookupSelectArray;
-    LETag                   requiredFeatureTag;
+    FeatureMask            *lookupSelectArray;
+    le_uint32              lookupSelectCount;
 
     le_uint16               *lookupOrderArray;
     le_uint32               lookupOrderCount;
 
+    LETableReference        fReference;
+
 private:
 
     LookupProcessor(const LookupProcessor &other); // forbid copying of this class