1 How to add a new font encoding to wxWidgets 2 =========================================== 3 4I. Introduction 5--------------- 6 7 wxWidgets has built in support for a certain number of font encodings (which 8is synonymous with code sets and character sets for us here even though it is 9not exactly the same thing), look at include/wx/fontenc.h for the full list. 10This list is far from being exhaustive though and if you have enough knowledge 11about an encoding to add support for it to wxWidgets, this tech note is for 12you! 13 14 A word of warning though: this is written out of my head and is surely 15incomplete. Please correct the text here, especially if you detect problems 16when you try following it. 17 18 Also note that I completely ignore all the difficult issues of support for 19non European languages in the GUI (i.e. BiDi and text orientation support). 20 21 22II. The receipt 23--------------- 24 25Suppose you want to add support for Klingon to wxWidgets. This is what you'd 26have to do: 27 281. 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 332. 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 493. 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 594. 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 67Author: VZ 68Version: $Id: tn0018.txt 27090 2004-05-04 08:27:20Z JS $ 69