/////////////////////////////////////////////////////////////////////////////
-// Name: encconv.h
+// Name: wx/encconv.h
// Purpose: wxEncodingConverter class for converting between different
// font encodings
// Author: Vaclav Slavik
// Copyright: (c) 1999 Vaclav Slavik
-// Licence: wxWindows Licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifndef __ENCCONV_H__
-#define __ENCCONV_H__
-
-#ifdef __GNUG__
-#pragma interface "encconv.h"
-#endif
+#ifndef _WX_ENCCONV_H_
+#define _WX_ENCCONV_H_
#include "wx/defs.h"
-#include "wx/font.h"
-#include "wx/dynarray.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,
wxPLATFORM_WINDOWS,
wxPLATFORM_OS2,
- wxPLATFORM_MAC,
+ wxPLATFORM_MAC
};
-WX_DEFINE_ARRAY(wxFontEncoding, wxFontEncodingArray);
+// ----------------------------------------------------------------------------
+// types
+// ----------------------------------------------------------------------------
+WX_DEFINE_ARRAY_INT(wxFontEncoding, wxFontEncodingArray);
//--------------------------------------------------------------------------------
// wxEncodingConverter
// 8bit encodings/charsets. It can also convert from/to Unicode
//--------------------------------------------------------------------------------
-class WXDLLEXPORT wxEncodingConverter : public wxObject
+class WXDLLIMPEXP_BASE wxEncodingConverter : public wxObject
{
public:
-
+
wxEncodingConverter();
- ~wxEncodingConverter() { if (m_Table) delete[] m_Table; }
-
- // Initialize convertion. Both output or input encoding may
- // be wxFONTENCODING_UNICODE, but only if wxUSE_UNICODE is set to 1.
+ virtual ~wxEncodingConverter() { if (m_Table) delete[] m_Table; }
+
+ // Initialize conversion. Both output or input encoding may
+ // be wxFONTENCODING_UNICODE, but only if wxUSE_WCHAR_T is set to 1.
//
// All subsequent calls to Convert() will interpret it's argument
// as a string in input_enc encoding and will output string in
// output_enc encoding.
//
- // You must call this method before calling Convert. You may call
+ // You must call this method before calling Convert. You may call
// it more than once in order to switch to another conversion
//
// Method affects behaviour of Convert() in case input character
// cannot be converted because it does not exist in output encoding:
- // wxCONVERT_STRICT --
- // follow behaviour of GNU Recode - just copy unconvertable
- // characters to output and don't change them (it's integer
+ // wxCONVERT_STRICT --
+ // follow behaviour of GNU Recode - just copy unconvertable
+ // characters to output and don't change them (it's integer
// value will stay the same)
// wxCONVERT_SUBSTITUTE --
- // try some (lossy) substitutions - e.g. replace
+ // try some (lossy) substitutions - e.g. replace
// unconvertable latin capitals with acute by ordinary
// capitals, replace en-dash or em-dash by '-' etc.
// both modes gurantee that output string will have same length
// as input string
//
- // Returns FALSE if given conversion is impossible, TRUE otherwise
+ // Returns false if given conversion is impossible, true otherwise
// (conversion may be impossible either if you try to convert
- // to Unicode with non-Unicode build of wxWindows or if input
+ // to Unicode with non-Unicode build of wxWidgets or if input
// or output encoding is not supported.)
bool Init(wxFontEncoding input_enc, wxFontEncoding output_enc, int method = wxCONVERT_STRICT);
-
+
// Convert input string according to settings passed to Init.
// Note that you must call Init before using Convert!
- void Convert(const wxChar* input, wxChar* output);
- void Convert(wxChar* str) { Convert(str, str); }
- wxString Convert(const wxString& input);
-
-#if wxUSE_UNICODE // otherwise wxChar === char
- void Convert(const char* input, wxChar* output);
- void Convert(const wxChar* input, char* output);
- void Convert(const char* input, char* output);
- void Convert(char* str) { Convert(str, str); }
-#endif
+ bool Convert(const char* input, char* output) const;
+ bool Convert(char* str) const { return Convert(str, str); }
+ wxString Convert(const wxString& input) const;
+
+#if wxUSE_WCHAR_T
+ bool Convert(const char* input, wchar_t* output) const;
+ bool Convert(const wchar_t* input, char* output) const;
+ bool Convert(const wchar_t* input, wchar_t* output) const;
+ bool Convert(wchar_t* str) const { return Convert(str, str); }
+#endif
// Return equivalent(s) for given font that are used
// under given platform. wxPLATFORM_CURRENT means the plaform
// this binary was compiled for
// that you loose special chars like quotation marks or em-dashes
// but you shouldn't loose any diacritics and language-specific
// characters when converting between equivalent encodings).
- //
- // Convert() method is not limited to converting between
+ //
+ // Convert() method is not limited to converting between
// equivalent encodings, it can convert between arbitrary
// two encodings!
//
// encoding is native for this platform or not)
static wxFontEncodingArray GetPlatformEquivalents(wxFontEncoding enc, int platform = wxPLATFORM_CURRENT);
- // Similar to GetPlatformEquivalent, but this one will return ALL
+ // Similar to GetPlatformEquivalent, but this one will return ALL
// equivalent encodings, regardless the platform, including itself.
static wxFontEncodingArray GetAllEquivalents(wxFontEncoding enc);
+ // Return true if [any text in] one multibyte encoding can be
+ // converted to another one losslessly.
+ //
+ // Do not call this with wxFONTENCODING_UNICODE, it doesn't make
+ // sense (always works in one sense and always depends on the text
+ // to convert in the other)
+ static bool CanConvert(wxFontEncoding encIn, wxFontEncoding encOut)
+ {
+ return GetAllEquivalents(encIn).Index(encOut) != wxNOT_FOUND;
+ }
+
private:
-
- wxChar *m_Table;
+
+#if wxUSE_WCHAR_T
+ wchar_t *m_Table;
+#else
+ char *m_Table;
+#endif
bool m_UnicodeInput, m_UnicodeOutput;
bool m_JustCopy;
-
-};
-
-
-#endif // __ENCCONV_H__
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ wxDECLARE_NO_COPY_CLASS(wxEncodingConverter);
+};
+#endif // _WX_ENCCONV_H_