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