From 39cd08a9936953f30aa31a93d83e5d6dbdb62447 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 31 Mar 2000 18:12:32 +0000 Subject: [PATCH] make font conversions work in wxBase git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7017 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/msw/tmake/filelist.txt | 11 +++--- include/wx/encconv.h | 26 ++++++++----- include/wx/font.h | 57 +-------------------------- include/wx/fontenc.h | 71 ++++++++++++++++++++++++++++++++++ include/wx/fontmap.h | 22 ++++++++--- src/common/fontmap.cpp | 39 +++++++++++-------- src/files.lst | 2 + 7 files changed, 137 insertions(+), 91 deletions(-) create mode 100644 include/wx/fontenc.h diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index 09e551c525..1f94886634 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -123,7 +123,7 @@ docmdi.cpp C docview.cpp C dynarray.cpp C B dynlib.cpp C B -encconv.cpp C +encconv.cpp C B event.cpp C B extended.c C B ffile.cpp C B @@ -132,7 +132,7 @@ fileconf.cpp C B filefn.cpp C B filesys.cpp C B fontcmn.cpp C -fontmap.cpp C +fontmap.cpp C B framecmn.cpp C fs_inet.cpp C B fs_zip.cpp C B @@ -586,7 +586,7 @@ docview.h W dragimag.h W dynarray.h W B dynlib.h W B -encconv.h W +encconv.h W B event.h W B expr.h W ffile.h W B @@ -597,10 +597,11 @@ filefn.h W B filesys.h W B font.h W fontdlg.h W +fontenc.h W B fontenum.h W -fontmap.h W +fontmap.h W B fontdlg.h W -fontutil.h W +fontutil.h W B frame.h W fs_inet.h W B fs_zip.h W B diff --git a/include/wx/encconv.h b/include/wx/encconv.h index 9d2c30159d..13dc535342 100644 --- a/include/wx/encconv.h +++ b/include/wx/encconv.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: encconv.h +// Name: wx/encconv.h // Purpose: wxEncodingConverter class for converting between different // font encodings // Author: Vaclav Slavik @@ -7,26 +7,31 @@ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// -#ifndef __ENCCONV_H__ -#define __ENCCONV_H__ +#ifndef _WX_ENCCONV_H_ +#define _WX_ENCCONV_H_ #ifdef __GNUG__ #pragma interface "encconv.h" #endif #include "wx/defs.h" -#include "wx/font.h" +#include "wx/object.h" +#include "wx/fontenc.h" #include "wx/dynarray.h" +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- - -enum { +enum +{ wxCONVERT_STRICT, wxCONVERT_SUBSTITUTE }; -enum { +enum +{ wxPLATFORM_CURRENT = -1, wxPLATFORM_UNIX = 0, @@ -35,8 +40,11 @@ enum { wxPLATFORM_MAC }; -WX_DEFINE_ARRAY(wxFontEncoding, wxFontEncodingArray); +// ---------------------------------------------------------------------------- +// types +// ---------------------------------------------------------------------------- +WX_DEFINE_ARRAY(wxFontEncoding, wxFontEncodingArray); //-------------------------------------------------------------------------------- // wxEncodingConverter @@ -140,4 +148,4 @@ class WXDLLEXPORT wxEncodingConverter : public wxObject }; -#endif // __ENCCONV_H__ +#endif // _WX_ENCCONV_H_ diff --git a/include/wx/font.h b/include/wx/font.h index 6b1737db51..706aad009f 100644 --- a/include/wx/font.h +++ b/include/wx/font.h @@ -21,6 +21,7 @@ // ---------------------------------------------------------------------------- #include "wx/defs.h" // for wxDEFAULT &c +#include "wx/fontenc.h" // the font encoding constants #include "wx/gdiobj.h" // the base class // ---------------------------------------------------------------------------- @@ -66,62 +67,6 @@ enum wxFontWeight wxFONTWEIGHT_MAX }; -// font encodings -enum wxFontEncoding -{ - wxFONTENCODING_SYSTEM = -1, // system default - wxFONTENCODING_DEFAULT, // current default encoding - - // ISO8859 standard defines a number of single-byte charsets - wxFONTENCODING_ISO8859_1, // West European (Latin1) - wxFONTENCODING_ISO8859_2, // Central and East European (Latin2) - wxFONTENCODING_ISO8859_3, // Esperanto (Latin3) - wxFONTENCODING_ISO8859_4, // Baltic languages (Estonian) (Latin4) - wxFONTENCODING_ISO8859_5, // Cyrillic - wxFONTENCODING_ISO8859_6, // Arabic - wxFONTENCODING_ISO8859_7, // Greek - wxFONTENCODING_ISO8859_8, // Hebrew - wxFONTENCODING_ISO8859_9, // Turkish (Latin5) - wxFONTENCODING_ISO8859_10, // Variation of Latin4 (Latin6) - wxFONTENCODING_ISO8859_11, // Thai - wxFONTENCODING_ISO8859_12, // doesn't exist currently, but put it - // here anyhow to make all ISO8859 - // consecutive numbers - wxFONTENCODING_ISO8859_13, // Latin7 - wxFONTENCODING_ISO8859_14, // Latin8 - wxFONTENCODING_ISO8859_15, // Latin9 (a.k.a. Latin0, includes euro) - wxFONTENCODING_ISO8859_MAX, - - // Cyrillic charset soup (see http://czyborra.com/charsets/cyrillic.html) - wxFONTENCODING_KOI8, // we don't support any of KOI8 variants - wxFONTENCODING_ALTERNATIVE, // same as MS-DOS CP866 - wxFONTENCODING_BULGARIAN, // used under Linux in Bulgaria - - // what would we do without Microsoft? They have their own encodings - // for DOS - wxFONTENCODING_CP437, // original MS-DOS codepage - wxFONTENCODING_CP850, // CP437 merged with Latin1 - wxFONTENCODING_CP852, // CP437 merged with Latin2 - wxFONTENCODING_CP855, // another cyrillic encoding - wxFONTENCODING_CP866, // and another one - // and for Windows - wxFONTENCODING_CP874, // WinThai - wxFONTENCODING_CP1250, // WinLatin2 - wxFONTENCODING_CP1251, // WinCyrillic - wxFONTENCODING_CP1252, // WinLatin1 - wxFONTENCODING_CP1253, // WinGreek (8859-7) - wxFONTENCODING_CP1254, // WinTurkish - wxFONTENCODING_CP1255, // WinHebrew - wxFONTENCODING_CP1256, // WinArabic - wxFONTENCODING_CP1257, // WinBaltic (same as Latin 7) - wxFONTENCODING_CP12_MAX, - - wxFONTENCODING_UNICODE, // Unicode - currently used only by - // wxEncodingConverter class - - wxFONTENCODING_MAX -}; - // ---------------------------------------------------------------------------- // wxFontBase represents a font object // ---------------------------------------------------------------------------- diff --git a/include/wx/fontenc.h b/include/wx/fontenc.h new file mode 100644 index 0000000000..a6163440b2 --- /dev/null +++ b/include/wx/fontenc.h @@ -0,0 +1,71 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/fontenc.h +// Purpose: wxFontEncoding constants +// Author: Vadim Zeitlin +// Modified by: +// Created: 29.03.00 +// RCS-ID: $Id$ +// Copyright: (c) Vadim Zeitlin +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_FONTENC_H_ +#define _WX_FONTENC_H_ + +// font encodings +enum wxFontEncoding +{ + wxFONTENCODING_SYSTEM = -1, // system default + wxFONTENCODING_DEFAULT, // current default encoding + + // ISO8859 standard defines a number of single-byte charsets + wxFONTENCODING_ISO8859_1, // West European (Latin1) + wxFONTENCODING_ISO8859_2, // Central and East European (Latin2) + wxFONTENCODING_ISO8859_3, // Esperanto (Latin3) + wxFONTENCODING_ISO8859_4, // Baltic languages (Estonian) (Latin4) + wxFONTENCODING_ISO8859_5, // Cyrillic + wxFONTENCODING_ISO8859_6, // Arabic + wxFONTENCODING_ISO8859_7, // Greek + wxFONTENCODING_ISO8859_8, // Hebrew + wxFONTENCODING_ISO8859_9, // Turkish (Latin5) + wxFONTENCODING_ISO8859_10, // Variation of Latin4 (Latin6) + wxFONTENCODING_ISO8859_11, // Thai + wxFONTENCODING_ISO8859_12, // doesn't exist currently, but put it + // here anyhow to make all ISO8859 + // consecutive numbers + wxFONTENCODING_ISO8859_13, // Latin7 + wxFONTENCODING_ISO8859_14, // Latin8 + wxFONTENCODING_ISO8859_15, // Latin9 (a.k.a. Latin0, includes euro) + wxFONTENCODING_ISO8859_MAX, + + // Cyrillic charset soup (see http://czyborra.com/charsets/cyrillic.html) + wxFONTENCODING_KOI8, // we don't support any of KOI8 variants + wxFONTENCODING_ALTERNATIVE, // same as MS-DOS CP866 + wxFONTENCODING_BULGARIAN, // used under Linux in Bulgaria + + // what would we do without Microsoft? They have their own encodings + // for DOS + wxFONTENCODING_CP437, // original MS-DOS codepage + wxFONTENCODING_CP850, // CP437 merged with Latin1 + wxFONTENCODING_CP852, // CP437 merged with Latin2 + wxFONTENCODING_CP855, // another cyrillic encoding + wxFONTENCODING_CP866, // and another one + // and for Windows + wxFONTENCODING_CP874, // WinThai + wxFONTENCODING_CP1250, // WinLatin2 + wxFONTENCODING_CP1251, // WinCyrillic + wxFONTENCODING_CP1252, // WinLatin1 + wxFONTENCODING_CP1253, // WinGreek (8859-7) + wxFONTENCODING_CP1254, // WinTurkish + wxFONTENCODING_CP1255, // WinHebrew + wxFONTENCODING_CP1256, // WinArabic + wxFONTENCODING_CP1257, // WinBaltic (same as Latin 7) + wxFONTENCODING_CP12_MAX, + + wxFONTENCODING_UNICODE, // Unicode - currently used only by + // wxEncodingConverter class + + wxFONTENCODING_MAX +}; + +#endif // _WX_FONTENC_H_ diff --git a/include/wx/fontmap.h b/include/wx/fontmap.h index f513a29563..43285146c0 100644 --- a/include/wx/fontmap.h +++ b/include/wx/fontmap.h @@ -20,14 +20,18 @@ // headers // ---------------------------------------------------------------------------- -#include "wx/font.h" // for wxFont and wxFontEncoding -#include "wx/fontutil.h" // for wxNativeEncodingInfo +#include "wx/fontenc.h" // for wxFontEncoding +#if wxUSE_GUI + #include "wx/fontutil.h" // for wxNativeEncodingInfo +#endif // wxUSE_GUI #if wxUSE_CONFIG -class WXDLLEXPORT wxConfigBase; -#endif + class WXDLLEXPORT wxConfigBase; +#endif // wxUSE_CONFIG -class WXDLLEXPORT wxWindow; +#if wxUSE_GUI + class WXDLLEXPORT wxWindow; +#endif // wxUSE_GUI // ---------------------------------------------------------------------------- // wxFontMapper manages user-definable correspondence between logical font @@ -52,6 +56,7 @@ public: // virtual dtor for a base class virtual ~wxFontMapper(); +#if wxUSE_GUI // find an alternative for the given encoding (which is supposed to not be // available on this system). If successful, return TRUE and fill info // structure with the parameters required to create the font, otherwise @@ -72,6 +77,7 @@ public: // If no facename is given, virtual bool IsEncodingAvailable(wxFontEncoding encoding, const wxString& facename = wxEmptyString); +#endif // wxUSE_GUI // returns the encoding for the given charset (in the form of RFC 2046) or // wxFONTENCODING_SYSTEM if couldn't decode it @@ -93,11 +99,13 @@ public: // configure the appearance of the dialogs we may popup // ---------------------------------------------------- +#if wxUSE_GUI // the parent window for modal dialogs void SetDialogParent(wxWindow *parent) { m_windowParent = parent; } // the title for the dialogs (note that default is quite reasonable) void SetDialogTitle(const wxString& title) { m_titleDialog = title; } +#endif // wxUSE_GUI // functions which allow to configure the config object used: by default, // the global one (from wxConfigBase::Get() will be used) and the default @@ -139,6 +147,7 @@ protected: // restore the config path after use void RestorePath(const wxString& pathOld); +#if wxUSE_GUI // GetAltForEncoding() helper: tests for the existence of the given // encoding and saves the result in config if ok - this results in the // following (desired) behaviour: when an unknown/unavailable encoding is @@ -149,6 +158,7 @@ protected: bool TestAltEncoding(const wxString& configEntry, wxFontEncoding encReplacement, wxNativeEncodingInfo *info); +#endif // wxUSE_GUI #if wxUSE_CONFIG // config object and path (in it) to use @@ -157,11 +167,13 @@ protected: wxString m_configRootPath; +#if wxUSE_GUI // the title for our dialogs wxString m_titleDialog; // the parent window for our dialogs wxWindow *m_windowParent; +#endif // wxUSE_GUI friend class wxFontMapperPathChanger; }; diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index 08c689569b..3a40d704a6 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -37,13 +37,16 @@ #include "wx/fontmap.h" #if wxUSE_CONFIG -#include "wx/config.h" -#include "wx/memconf.h" + #include "wx/config.h" + #include "wx/memconf.h" #endif -#include "wx/msgdlg.h" -#include "wx/fontdlg.h" -#include "wx/choicdlg.h" +#if wxUSE_GUI + #include "wx/msgdlg.h" + #include "wx/fontdlg.h" + #include "wx/choicdlg.h" +#endif // wxUSE_GUI + #include "wx/encconv.h" // ---------------------------------------------------------------------------- @@ -54,7 +57,9 @@ static const wxChar* FONTMAPPER_ROOT_PATH = wxT("wxWindows/FontMapper"); static const wxChar* FONTMAPPER_CHARSET_PATH = wxT("Charsets"); static const wxChar* FONTMAPPER_CHARSET_ALIAS_PATH = wxT("Aliases"); -static const wxChar* FONTMAPPER_FONT_FROM_ENCODING_PATH = wxT("Encodings"); +#if wxUSE_GUI + static const wxChar* FONTMAPPER_FONT_FROM_ENCODING_PATH = wxT("Encodings"); +#endif // wxUSE_GUI // encodings supported by GetEncodingDescription static wxFontEncoding gs_encodings[] = @@ -193,9 +198,11 @@ wxFontMapper::wxFontMapper() { #if wxUSE_CONFIG m_config = NULL; -#endif +#endif // wxUSE_CONFIG +#if wxUSE_GUI m_windowParent = NULL; +#endif // wxUSE_GUI } wxFontMapper::~wxFontMapper() @@ -440,6 +447,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, //else: unknown } +#if wxUSE_GUI // if still no luck, ask the user - unless disabled if ( (encoding == wxFONTENCODING_SYSTEM) && interactive ) { @@ -498,10 +506,11 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, RestorePath(pathOld); } -#endif +#endif // wxUSE_CONFIG } //else: cancelled } +#endif // wxUSE_GUI return encoding; } @@ -512,6 +521,8 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, // correspond to which is used by GetFontForEncoding() function // ---------------------------------------------------------------------------- +#if wxUSE_GUI + bool wxFontMapper::TestAltEncoding(const wxString& configEntry, wxFontEncoding encReplacement, wxNativeEncodingInfo *info) @@ -527,7 +538,7 @@ bool wxFontMapper::TestAltEncoding(const wxString& configEntry, { GetConfig()->Write(configEntry, info->ToString()); } -#endif +#endif // wxUSE_CONFIG return TRUE; } @@ -567,7 +578,6 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, configEntry += encName; #if wxUSE_CONFIG - // do we have a font spec for this encoding? wxString pathOld; if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) ) @@ -602,7 +612,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, } //else: there is no information in config about this encoding } -#endif +#endif // wxUSE_CONFIG // ask the user if ( interactive ) @@ -653,7 +663,6 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, } //else: we're in non-interactive mode - // now try the default mappings: wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding); size_t count = equiv.GetCount(); @@ -666,8 +675,6 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, return FALSE; } - - bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, wxFontEncoding *alt_encoding, const wxString& facename, @@ -679,8 +686,6 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, return r; } - - bool wxFontMapper::IsEncodingAvailable(wxFontEncoding encoding, const wxString& facename) { @@ -694,3 +699,5 @@ bool wxFontMapper::IsEncodingAvailable(wxFontEncoding encoding, else return FALSE; } + +#endif // wxUSE_GUI diff --git a/src/files.lst b/src/files.lst index f6fc2a3323..51e0cf1cce 100644 --- a/src/files.lst +++ b/src/files.lst @@ -137,6 +137,8 @@ ALL_HEADERS = \ protocol/protocol.h BASE_OBJS = \ + fontmap.o \ + encconv.o \ init.o \ appcmn.o \ cmdline.o \