16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*************************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1998-2013, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org************************************************************************/ 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __CMAPS_H 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __CMAPS_H 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/LETypes.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//#include "letest.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "sfnt.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass CMAPMapper 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0; 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~CMAPMapper(); 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap); 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected: 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CMAPMapper(const CMAPTable *cmap); 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CMAPMapper() {}; 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CMAPTable *fcmap; 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass CMAPFormat4Mapper : public CMAPMapper 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header); 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~CMAPFormat4Mapper(); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected: 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CMAPFormat4Mapper() {}; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_uint16 fEntrySelector; 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_uint16 fRangeShift; 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const le_uint16 *fEndCodes; 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const le_uint16 *fStartCodes; 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const le_uint16 *fIdDelta; 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const le_uint16 *fIdRangeOffset; 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass CMAPGroupMapper : public CMAPMapper 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~CMAPGroupMapper(); 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const; 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected: 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CMAPGroupMapper() {}; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_int32 fPower; 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_int32 fRangeOffset; 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CMAPGroup *fGroups; 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline CMAPMapper::CMAPMapper(const CMAPTable *cmap) 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : fcmap(cmap) 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // nothing else to do 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline CMAPMapper::~CMAPMapper() 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LE_DELETE_ARRAY(fcmap); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86