| /*************************************************************************** | 
 | * | 
 | *   Copyright (C) 1998-2003, International Business Machines | 
 | *   Corporation and others.  All Rights Reserved. | 
 | * | 
 | ************************************************************************/ | 
 |  | 
 |  | 
 | #ifndef __CMAPS_H | 
 | #define __CMAPS_H | 
 |  | 
 | #include "LETypes.h" | 
 | #include "sfnt.h" | 
 |  | 
 | class CMAPMapper | 
 | { | 
 | public: | 
 |     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0; | 
 |  | 
 |     virtual ~CMAPMapper(); | 
 |  | 
 |     static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap); | 
 |  | 
 | protected: | 
 |     CMAPMapper(const CMAPTable *cmap); | 
 |  | 
 |     CMAPMapper() {}; | 
 |  | 
 | private: | 
 |     const CMAPTable *fcmap; | 
 | }; | 
 |  | 
 | class CMAPFormat4Mapper : public CMAPMapper | 
 | { | 
 | public: | 
 |     CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header); | 
 |  | 
 |     virtual ~CMAPFormat4Mapper(); | 
 |  | 
 |     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; | 
 |  | 
 | protected: | 
 |     CMAPFormat4Mapper() {}; | 
 |  | 
 | private: | 
 |     le_uint16       fEntrySelector; | 
 |     le_uint16       fRangeShift; | 
 |     const le_uint16 *fEndCodes; | 
 |     const le_uint16 *fStartCodes; | 
 |     const le_uint16 *fIdDelta; | 
 |     const le_uint16 *fIdRangeOffset; | 
 | }; | 
 |  | 
 | class CMAPGroupMapper : public CMAPMapper | 
 | { | 
 | public: | 
 |     CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups); | 
 |  | 
 |     virtual ~CMAPGroupMapper(); | 
 |  | 
 |     virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; | 
 |  | 
 | protected: | 
 |     CMAPGroupMapper() {}; | 
 |  | 
 | private: | 
 |     le_int32 fPower; | 
 |     le_int32 fRangeOffset; | 
 |     const CMAPGroup *fGroups; | 
 | }; | 
 |  | 
 | inline CMAPMapper::CMAPMapper(const CMAPTable *cmap) | 
 |     : fcmap(cmap) | 
 | { | 
 |     // nothing else to do | 
 | } | 
 |  | 
 | inline CMAPMapper::~CMAPMapper() | 
 | { | 
 |     LE_DELETE_ARRAY(fcmap); | 
 | } | 
 |  | 
 | #endif | 
 |  |