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