File: encoding.h

package info (click to toggle)
ttmkfdir 3.0.9-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 184 kB
  • ctags: 262
  • sloc: cpp: 1,836; lex: 225; makefile: 58
file content (76 lines) | stat: -rw-r--r-- 1,811 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* -*- C++ -*-  */
#ifndef ENCODING_H__
#define ENCODING_H__

#include <vector>
#include <map>
#include <string>

#include "freetype/freetype.h"

#include "util.h"

class NumericMapping : public std::vector<int> {
public:
    typedef unsigned long int Key_t;
    NumericMapping (size_type n, FT_UShort p, FT_UShort enc):
	std::vector<int>(n),
	platform (p),
	encoding (enc)
    {
	for (size_type i =    0; i < 0x20; i++) (*this)[i] = -1;
	for (size_type i = 0x20; i < n;    i++) (*this)[i] = i;
    }

    static inline Key_t cmapkey (FT_UShort p, FT_UShort e) {
	return (p << 16) | e;
    }

    inline Key_t cmapkey (void) const {
	return cmapkey (platform, encoding);
    }
    
    ~NumericMapping (void) {};
    FT_UShort     platform;
    FT_UShort     encoding;
};

class Encoding;
class Encodings_t : public std::multimap<NumericMapping::Key_t, Encoding *> {
public:
    Encodings_t (void);
protected:
    void ReadEncodings (void);
};

typedef util::Singleton<Encodings_t> Encodings;

class Encoding {
public:
    Encoding (unsigned int s = 0x100):size(s) {};
    inline void AddMapping (NumericMapping *m) {
	mappings[m->cmapkey ()] = m;
    }

    typedef std::map<NumericMapping::Key_t, NumericMapping *> MappingMap_t;
    typedef struct {
	unsigned int size;
        unsigned int enc_size;
        unsigned int start_code;
	struct {
	    FT_UShort     platform;
	    FT_UShort     encoding;
	    int *mappingtable;
	} mapdata;
	const char *aliases[5];
    } BuiltinEncoding_t;
    Encoding (Encodings_t *, BuiltinEncoding_t *);
    std::vector<std::string> names;
    MappingMap_t             mappings;
    unsigned int             size;
    unsigned int             enc_size;
    unsigned int             start_code;
    static BuiltinEncoding_t builtin_encodings[];
};

#endif /* ENCODING_H__ */