]> git.saurik.com Git - apple/icu.git/blob - icuSources/layout/GlyphIterator.h
ICU-491.11.1.tar.gz
[apple/icu.git] / icuSources / layout / GlyphIterator.h
1 /*
2 *
3 * (C) Copyright IBM Corp. 1998-2008 - 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 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) const;
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 const GlyphClassDefinitionTable *glyphClassDefinitionTable;
96 const MarkAttachClassDefinitionTable *markAttachClassDefinitionTable;
97
98 GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class
99 };
100
101 U_NAMESPACE_END
102 #endif