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