Remove packaging direcotry
[platform/upstream/icu.git] / source / layout / GlyphIterator.h
1 /*
2  *
3  * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
4  *
5  */
6
7 #ifndef __GLYPHITERATOR_H
8 #define __GLYPHITERATOR_H
9
10 /**
11  * \file
12  * \internal
13  */
14
15 #include "LETypes.h"
16 #include "OpenTypeTables.h"
17 #include "GlyphDefinitionTables.h"
18
19 U_NAMESPACE_BEGIN
20
21 class LEGlyphStorage;
22 class GlyphPositionAdjustments;
23
24 class GlyphIterator : public UMemory {
25 public:
26     GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
27                   FeatureMask theFeatureMask, const LEReferenceTo<GlyphDefinitionTableHeader> &theGlyphDefinitionTableHeader);
28
29     GlyphIterator(GlyphIterator &that);
30
31     GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask);
32
33     GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags);
34
35     virtual ~GlyphIterator();
36
37     void reset(le_uint16 newLookupFlags, LETag newFeatureTag);
38
39     le_bool next(le_uint32 delta = 1);
40     le_bool prev(le_uint32 delta = 1);
41     le_bool findFeatureTag();
42
43     le_bool isRightToLeft() const;
44     le_bool ignoresMarks() const;
45
46     le_bool baselineIsLogicalEnd() const;
47
48     LEGlyphID getCurrGlyphID() const;
49     le_int32  getCurrStreamPosition() const;
50
51     le_int32  getMarkComponent(le_int32 markPosition) const;
52     le_bool   findMark2Glyph();
53
54     void getCursiveEntryPoint(LEPoint &entryPoint) const;
55     void getCursiveExitPoint(LEPoint &exitPoint) const;
56
57     void setCurrGlyphID(TTGlyphID glyphID);
58     void setCurrStreamPosition(le_int32 position);
59     void setCurrGlyphBaseOffset(le_int32 baseOffset);
60     void adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
61                                            float xAdvanceAdjust,   float yAdvanceAdjust);
62
63     void setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
64                                         float xAdvanceAdjust,   float yAdvanceAdjust);
65
66     void clearCursiveEntryPoint();
67     void clearCursiveExitPoint();
68     void setCursiveEntryPoint(LEPoint &entryPoint);
69     void setCursiveExitPoint(LEPoint &exitPoint);
70     void setCursiveGlyph();
71
72     LEGlyphID *insertGlyphs(le_int32 count, LEErrorCode& success);
73     le_int32 applyInsertions();
74
75 private:
76     le_bool filterGlyph(le_uint32 index);
77     le_bool hasFeatureTag(le_bool matchGroup) const;
78     le_bool nextInternal(le_uint32 delta = 1);
79     le_bool prevInternal(le_uint32 delta = 1);
80
81     le_int32  direction;
82     le_int32  position;
83     le_int32  nextLimit;
84     le_int32  prevLimit;
85
86     LEGlyphStorage &glyphStorage;
87     GlyphPositionAdjustments *glyphPositionAdjustments;
88
89     le_int32    srcIndex;
90     le_int32    destIndex;
91     le_uint16   lookupFlags;
92     FeatureMask featureMask;
93     le_int32    glyphGroup;
94
95     LEReferenceTo<GlyphClassDefinitionTable> glyphClassDefinitionTable;
96     LEReferenceTo<MarkAttachClassDefinitionTable> markAttachClassDefinitionTable;
97
98     GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class
99
100     struct {
101       LEGlyphID   id;
102       le_bool     result;
103     } filterCache;
104     le_bool   filterCacheValid;
105
106     void filterResetCache(void);
107 };
108
109 U_NAMESPACE_END
110 #endif