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