1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/mgl/fontutil.cpp
3// Purpose:     Font helper functions for MGL
4// Author:      Vaclav Slavik
5// Created:     2001/04/29
6// RCS-ID:      $Id: fontutil.cpp 43550 2006-11-20 20:45:57Z VS $
7// Copyright:   (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
8// Licence:     wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11// For compilers that support precompilation, includes "wx.h".
12#include "wx/wxprec.h"
13
14#ifdef __BORLANDC__
15    #pragma hdrstop
16#endif
17
18#ifndef WX_PRECOMP
19    #include "wx/hash.h"
20    #include "wx/log.h"
21#endif
22
23#include "wx/fontutil.h"
24#include "wx/encinfo.h"
25#include "wx/fontmap.h"
26#include "wx/tokenzr.h"
27
28#include "wx/listimpl.cpp"
29#include "wx/sysopt.h"
30#include "wx/mgl/private.h"
31#include "wx/private/fontmgr.h"
32
33#include <mgraph.h>
34
35// ============================================================================
36// implementation
37// ============================================================================
38
39// ----------------------------------------------------------------------------
40// wxNativeEncodingInfo
41// ----------------------------------------------------------------------------
42
43// convert to/from the string representation: format is
44//      encoding[;facename]
45bool wxNativeEncodingInfo::FromString(const wxString& s)
46{
47    wxStringTokenizer tokenizer(s, _T(";"));
48
49    wxString encid = tokenizer.GetNextToken();
50    long enc;
51    if ( !encid.ToLong(&enc) )
52        return false;
53    encoding = (wxFontEncoding)enc;
54
55    // ok even if empty
56    facename = tokenizer.GetNextToken();
57
58    return true;
59}
60
61wxString wxNativeEncodingInfo::ToString() const
62{
63    wxString s;
64    s << (long)encoding;
65    if ( !facename.empty() )
66    {
67        s << _T(';') << facename;
68    }
69
70    return s;
71}
72
73// ----------------------------------------------------------------------------
74// common functions
75// ----------------------------------------------------------------------------
76
77bool wxGetNativeFontEncoding(wxFontEncoding encoding,
78                             wxNativeEncodingInfo *info)
79{
80    wxCHECK_MSG( info, false, _T("bad pointer in wxGetNativeFontEncoding") );
81
82    if ( encoding == wxFONTENCODING_DEFAULT )
83    {
84        encoding = wxFont::GetDefaultEncoding();
85    }
86
87    switch ( encoding )
88    {
89        case wxFONTENCODING_ISO8859_1:
90        case wxFONTENCODING_ISO8859_2:
91        case wxFONTENCODING_ISO8859_3:
92        case wxFONTENCODING_ISO8859_4:
93        case wxFONTENCODING_ISO8859_5:
94        case wxFONTENCODING_ISO8859_6:
95        case wxFONTENCODING_ISO8859_7:
96        case wxFONTENCODING_ISO8859_8:
97        case wxFONTENCODING_ISO8859_9:
98        case wxFONTENCODING_ISO8859_10:
99        case wxFONTENCODING_ISO8859_11:
100        case wxFONTENCODING_ISO8859_13:
101        case wxFONTENCODING_ISO8859_14:
102        case wxFONTENCODING_ISO8859_15:
103            info->mglEncoding = MGL_ENCODING_ISO8859_1 +
104                                (encoding - wxFONTENCODING_ISO8859_1);
105            break;
106
107        case wxFONTENCODING_KOI8:
108            info->mglEncoding = MGL_ENCODING_KOI8;
109            break;
110
111        case wxFONTENCODING_CP1250:
112        case wxFONTENCODING_CP1251:
113        case wxFONTENCODING_CP1252:
114        case wxFONTENCODING_CP1253:
115        case wxFONTENCODING_CP1254:
116        case wxFONTENCODING_CP1255:
117        case wxFONTENCODING_CP1256:
118        case wxFONTENCODING_CP1257:
119            info->mglEncoding = MGL_ENCODING_CP1250 +
120                                (encoding - wxFONTENCODING_CP1250);
121            break;
122
123        case wxFONTENCODING_SYSTEM:
124            info->mglEncoding = MGL_ENCODING_ASCII;
125            break;
126
127        default:
128            // encoding not known to MGL
129            return false;
130    }
131
132    info->encoding = encoding;
133
134    return true;
135}
136
137bool wxTestFontEncoding(const wxNativeEncodingInfo& info)
138{
139    if ( !info.facename )
140        return true;
141
142    wxFontBundle *bundle = wxFontsManager::Get()->GetBundle(info.facename);
143    if ( !bundle )
144        return false;
145    if ( bundle->GetInfo()->fontLibType == MGL_BITMAPFONT_LIB )
146    {
147        return (info.mglEncoding == MGL_ENCODING_ASCII ||
148                info.mglEncoding == MGL_ENCODING_ISO8859_1 ||
149                info.mglEncoding == MGL_ENCODING_ISO8859_15 ||
150                info.mglEncoding == MGL_ENCODING_CP1252);
151    }
152    else
153        return true;
154}
155