• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
getReference()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