]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/layout/GlyphIterator.h
ICU-491.11.1.tar.gz
[apple/icu.git] / icuSources / layout / GlyphIterator.h
index 4481c99fd9e7a91def21a3e88536816a411556b7..2aef81548926a1863f10f60b0dca0c53921e6951 100644 (file)
@@ -1,7 +1,6 @@
 /*
- * %W% %E%
  *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
  *
  */
 
 #include "LETypes.h"
 #include "OpenTypeTables.h"
 #include "GlyphDefinitionTables.h"
-#include "GlyphPositionAdjustments.h"
 
 U_NAMESPACE_BEGIN
 
+class LEGlyphStorage;
+class GlyphPositionAdjustments;
+
 class GlyphIterator : public UMemory {
 public:
-    GlyphIterator(LEGlyphID *theGlyphs, GlyphPositionAdjustment *theGlyphPositionAdjustments, le_int32 theGlyphCount,
-        le_bool rightToLeft, le_uint16 theLookupFlags, LETag theFeatureTag, const LETag *theGlyphTags[],
-        const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader);
+    GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
+        FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader);
 
     GlyphIterator(GlyphIterator &that);
 
-    GlyphIterator(GlyphIterator &that, LETag newFeatureTag);
+    GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask);
 
     GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags);
 
-    ~GlyphIterator();
+    virtual ~GlyphIterator();
+
+    void reset(le_uint16 newLookupFlags, LETag newFeatureTag);
 
     le_bool next(le_uint32 delta = 1);
     le_bool prev(le_uint32 delta = 1);
@@ -42,39 +44,37 @@ public:
     le_bool ignoresMarks() const;
 
     le_bool baselineIsLogicalEnd() const;
-    le_bool hasCursiveFirstExitPoint() const;
-    le_bool hasCursiveLastExitPoint() const;
 
     LEGlyphID getCurrGlyphID() const;
     le_int32  getCurrStreamPosition() const;
-    void   getCurrGlyphPositionAdjustment(GlyphPositionAdjustment &adjustment) const;
 
     le_int32  getMarkComponent(le_int32 markPosition) const;
     le_bool   findMark2Glyph();
 
-    void getCursiveLastExitPoint(LEPoint &exitPoint) const;
-    LEGlyphID getCursiveLastGlyphID() const;
-    float getCursiveBaselineAdjustment() const;
-    void getCursiveLastPositionAdjustment(GlyphPositionAdjustment &adjustment) const;
+    void getCursiveEntryPoint(LEPoint &entryPoint) const;
+    void getCursiveExitPoint(LEPoint &exitPoint) const;
 
     void setCurrGlyphID(TTGlyphID glyphID);
     void setCurrStreamPosition(le_int32 position);
-    void setCurrGlyphPositionAdjustment(const GlyphPositionAdjustment *adjustment);
     void setCurrGlyphBaseOffset(le_int32 baseOffset);
-    void adjustCurrGlyphPositionAdjustment(float xPlacmentAdjust, float yPlacementAdjust,
-                                           float xAdvanceAdjust, float yAdvanceAdjust);
+    void adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
+                                           float xAdvanceAdjust,   float yAdvanceAdjust);
+
+    void setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
+                                        float xAdvanceAdjust,   float yAdvanceAdjust);
+
+    void clearCursiveEntryPoint();
+    void clearCursiveExitPoint();
+    void setCursiveEntryPoint(LEPoint &entryPoint);
+    void setCursiveExitPoint(LEPoint &exitPoint);
+    void setCursiveGlyph();
 
-    void setCursiveFirstExitPoint();
-    void resetCursiveLastExitPoint();
-    void setCursiveLastExitPoint(LEPoint &exitPoint);
-    void setCursiveBaselineAdjustment(float adjustment);
-    void adjustCursiveLastGlyphPositionAdjustment(float xPlacmentAdjust, float yPlacementAdjust,
-                                           float xAdvanceAdjust, float yAdvanceAdjust);
+    LEGlyphID *insertGlyphs(le_int32 count, LEErrorCode& success);
+    le_int32 applyInsertions();
 
 private:
-    GlyphIterator();
     le_bool filterGlyph(le_uint32 index) const;
-    le_bool hasFeatureTag() const;
+    le_bool hasFeatureTag(le_bool matchGroup) const;
     le_bool nextInternal(le_uint32 delta = 1);
     le_bool prevInternal(le_uint32 delta = 1);
 
@@ -82,15 +82,16 @@ private:
     le_int32  position;
     le_int32  nextLimit;
     le_int32  prevLimit;
-    le_int32  cursiveFirstPosition;
-    le_int32  cursiveLastPosition;
-    float     cursiveBaselineAdjustment;
-    LEPoint   cursiveLastExitPoint;
-    LEGlyphID *glyphs;
-    GlyphPositionAdjustment *glyphPositionAdjustments;
-    le_uint16 lookupFlags;
-    LETag    featureTag;
-    const LETag **glyphTags;
+
+    LEGlyphStorage &glyphStorage;
+    GlyphPositionAdjustments *glyphPositionAdjustments;
+
+    le_int32    srcIndex;
+    le_int32    destIndex;
+    le_uint16   lookupFlags;
+    FeatureMask featureMask;
+    le_int32    glyphGroup;
+
     const GlyphClassDefinitionTable *glyphClassDefinitionTable;
     const MarkAttachClassDefinitionTable *markAttachClassDefinitionTable;