1/***************************************************************************
2*
3*   Copyright (C) 1998-2013, 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
16class CMAPMapper
17{
18public:
19    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0;
20
21    virtual ~CMAPMapper();
22
23    static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap);
24
25protected:
26    CMAPMapper(const CMAPTable *cmap);
27
28    CMAPMapper() {};
29
30private:
31    const CMAPTable *fcmap;
32};
33
34class CMAPFormat4Mapper : public CMAPMapper
35{
36public:
37    CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header);
38
39    virtual ~CMAPFormat4Mapper();
40
41    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
42
43protected:
44    CMAPFormat4Mapper() {};
45
46private:
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
55class CMAPGroupMapper : public CMAPMapper
56{
57public:
58    CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups);
59
60    virtual ~CMAPGroupMapper();
61
62    virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const;
63
64protected:
65    CMAPGroupMapper() {};
66
67private:
68    le_int32 fPower;
69    le_int32 fRangeOffset;
70    const CMAPGroup *fGroups;
71};
72
73inline CMAPMapper::CMAPMapper(const CMAPTable *cmap)
74    : fcmap(cmap)
75{
76    // nothing else to do
77}
78
79inline CMAPMapper::~CMAPMapper()
80{
81    LE_DELETE_ARRAY(fcmap);
82}
83
84#endif
85
86