1 /* 2 ****************************************************************************** 3 * 4 * © 2016 and later: Unicode, Inc. and others. 5 * License & terms of use: http://www.unicode.org/copyright.html 6 * 7 ****************************************************************************** 8 ****************************************************************************** * 9 * 10 * Copyright (C) 1999-2003, International Business Machines 11 * Corporation and others. All Rights Reserved. 12 * 13 ****************************************************************************** * 14 * file name: cmaps.h 15 * 16 * created on: ??/??/2001 17 * created by: Eric R. Mader 18 */ 19 20 #ifndef __CMAPS_H 21 #define __CMAPS_H 22 23 #include "layout/LETypes.h" 24 #include "sfnt.h" 25 26 class CMAPMapper 27 { 28 public: 29 virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0; 30 31 virtual ~CMAPMapper(); 32 33 static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap); 34 35 protected: 36 CMAPMapper(const CMAPTable *cmap); 37 CMAPMapper()38 CMAPMapper() {}; 39 40 private: 41 const CMAPTable *fcmap; 42 }; 43 44 class CMAPFormat4Mapper : public CMAPMapper 45 { 46 public: 47 CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header); 48 49 virtual ~CMAPFormat4Mapper(); 50 51 virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; 52 53 protected: CMAPFormat4Mapper()54 CMAPFormat4Mapper() {}; 55 56 private: 57 le_uint16 fEntrySelector; 58 le_uint16 fRangeShift; 59 const le_uint16 *fEndCodes; 60 const le_uint16 *fStartCodes; 61 const le_uint16 *fIdDelta; 62 const le_uint16 *fIdRangeOffset; 63 }; 64 65 class CMAPGroupMapper : public CMAPMapper 66 { 67 public: 68 CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups); 69 70 virtual ~CMAPGroupMapper(); 71 72 virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; 73 74 protected: CMAPGroupMapper()75 CMAPGroupMapper() {}; 76 77 private: 78 le_int32 fPower; 79 le_int32 fRangeOffset; 80 const CMAPGroup *fGroups; 81 }; 82 CMAPMapper(const CMAPTable * cmap)83inline CMAPMapper::CMAPMapper(const CMAPTable *cmap) 84 : fcmap(cmap) 85 { 86 // nothing else to do 87 } 88 ~CMAPMapper()89inline CMAPMapper::~CMAPMapper() 90 { 91 LE_DELETE_ARRAY(fcmap); 92 } 93 94 #endif 95 96