]>
Commit | Line | Data |
---|---|---|
1 | How to add a new font encoding to wxWidgets | |
2 | =========================================== | |
3 | ||
4 | I. Introduction | |
5 | --------------- | |
6 | ||
7 | wxWidgets has built in support for a certain number of font encodings (which | |
8 | is synonymous with code sets and character sets for us here even though it is | |
9 | not exactly the same thing), look at include/wx/fontenc.h for the full list. | |
10 | This list is far from being exhaustive though and if you have enough knowledge | |
11 | about an encoding to add support for it to wxWidgets, this tech note is for | |
12 | you! | |
13 | ||
14 | A word of warning though: this is written out of my head and is surely | |
15 | incomplete. Please correct the text here, especially if you detect problems | |
16 | when you try following it. | |
17 | ||
18 | Also note that I completely ignore all the difficult issues of support for | |
19 | non European languages in the GUI (i.e. BiDi and text orientation support). | |
20 | ||
21 | ||
22 | II. The receipt | |
23 | --------------- | |
24 | ||
25 | Suppose you want to add support for Klingon to wxWidgets. This is what you'd | |
26 | have to do: | |
27 | ||
28 | 1. include/wx/fontenc.h: add a new wxFONTENCODING_KLINGON enum element, if | |
29 | possible without changing the values of the existing elements of the enum | |
30 | and be careful to now make it equal to some other elements -- this means | |
31 | that you have to put it before wxFONTENCODING_MAX | |
32 | ||
33 | 2. wxFONTENCODING_MAX must be the same as the number of elements in 3 | |
34 | (hopefully) self explanatory arrays in src/common/fmapbase.cpp: | |
35 | a) gs_encodings | |
36 | b) gs_encodingDescs | |
37 | c) gs_encodingNames | |
38 | ||
39 | You must update all of them, e.g. you'd add wxFONTENCODING_KLINGON, | |
40 | "Klingon (Star Trek)" and "klingon" to them in this example. The latter | |
41 | name should ideally be understandable to both Win32 and iconv as it is used | |
42 | to convert to/from this encoding under Windows and Unix respectively. | |
43 | Typically any reasonable name will be supported by iconv, if unsure run | |
44 | "iconv -l" on your favourite Unix system. For the list of charsets | |
45 | supported under Win32, look under HKEY_CLASSES_ROOT\MIME\Database\Charset | |
46 | in regedit. Of course, being consistent with the existing encoding names | |
47 | wouldn't hurt neither. | |
48 | ||
49 | 3. Normally you don't have to do anything else if you've got support for this | |
50 | encoding under both Win32 and Unix. If you haven't, you should modify | |
51 | wxEncodingConverter to support it (this could be useful anyhow as a | |
52 | fallback for systems where iconv is unavailable). To do it you must: | |
53 | a) add a new table to src/common/unictabl.inc: note that this file is auto | |
54 | generated so you have to modify misc/unictabl script instead (probably) | |
55 | b) possibly update EquivalentEncodings table in src/common/encconv.cpp | |
56 | if wxFONTENCODING_KLINGON can be converted into another one | |
57 | (losslessly only or not?) | |
58 | ||
59 | 4. Add a unit test (see tn0017.txt) for support of your new encoding (with | |
60 | time we should have a wxCSConv unit test so you would just add a case to | |
61 | it for wxFONTENCODING_KLINGON) and test everything on as many different | |
62 | platforms as you can. | |
63 | ||
64 | ||
65 | === EOF === | |
66 | ||
67 | Author: VZ | |
68 | Version: $Id$ |