1 /*************************************************************************** 2 * 3 * Copyright (C) 1998-2006, International Business Machines 4 * Corporation and others. All Rights Reserved. 5 * 6 ************************************************************************/ 7 8 9 #ifndef __CMAPS_H 10 #define __CMAPS_H 11 12 #include "layout/LETypes.h" 13 #include "letest.h" 14 #include "sfnt.h" 15 16 class CMAPMapper 17 { 18 public: 19 virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0; 20 21 virtual ~CMAPMapper(); 22 23 static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap); 24 25 protected: 26 CMAPMapper(const CMAPTable *cmap); 27 CMAPMapper()28 CMAPMapper() {}; 29 30 private: 31 const CMAPTable *fcmap; 32 }; 33 34 class CMAPFormat4Mapper : public CMAPMapper 35 { 36 public: 37 CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header); 38 39 virtual ~CMAPFormat4Mapper(); 40 41 virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; 42 43 protected: CMAPFormat4Mapper()44 CMAPFormat4Mapper() {}; 45 46 private: 47 le_uint16 fEntrySelector; 48 le_uint16 fRangeShift; 49 const le_uint16 *fEndCodes; 50 const le_uint16 *fStartCodes; 51 const le_uint16 *fIdDelta; 52 const le_uint16 *fIdRangeOffset; 53 }; 54 55 class CMAPGroupMapper : public CMAPMapper 56 { 57 public: 58 CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups); 59 60 virtual ~CMAPGroupMapper(); 61 62 virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; 63 64 protected: CMAPGroupMapper()65 CMAPGroupMapper() {}; 66 67 private: 68 le_int32 fPower; 69 le_int32 fRangeOffset; 70 const CMAPGroup *fGroups; 71 }; 72 CMAPMapper(const CMAPTable * cmap)73inline CMAPMapper::CMAPMapper(const CMAPTable *cmap) 74 : fcmap(cmap) 75 { 76 // nothing else to do 77 } 78 ~CMAPMapper()79inline CMAPMapper::~CMAPMapper() 80 { 81 DELETE_ARRAY(fcmap); 82 } 83 84 #endif 85 86