/* * %W% %E% * * (C) Copyright IBM Corp. 1998 - All Rights Reserved * * Portions Copyright 1998 by Sun Microsystems, Inc., * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. * All rights reserved. * * This software is the confidential and proprietary information * of Sun Microsystems, Inc. ("Confidential Information"). You * shall not disclose such Confidential Information and shall use * it only in accordance with the terms of the license agreement * you entered into with Sun. * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. * This technology is protected by multiple US and International * patents. This notice and attribution to IBM may not be removed. */ #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() { delete[] (char *) fcmap; } #endif