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