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