#define _WX_CONVAUTO_H_
#include "wx/strconv.h"
+#include "wx/fontenc.h"
#if wxUSE_WCHAR_T
{
public:
// default ctor, the real conversion will be created on demand
- wxConvAuto() { m_conv = NULL; /* the rest will be initialized later */ }
+ wxConvAuto(wxFontEncoding enc = wxFONTENCODING_DEFAULT)
+ {
+ Init();
+
+ m_encDefault = enc;
+ }
// copy ctor doesn't initialize anything neither as conversion can only be
// deduced on first use
- wxConvAuto(const wxConvAuto& WXUNUSED(other)) { m_conv = NULL; }
+ wxConvAuto(const wxConvAuto& other) : wxMBConv()
+ {
+ Init();
+
+ m_encDefault = other.m_encDefault;
+ }
+
+ virtual ~wxConvAuto()
+ {
+ if ( m_ownsConv )
+ delete m_conv;
+ }
+
+ // get/set the fall-back encoding used when the input text doesn't have BOM
+ // and isn't UTF-8
+ //
+ // special values are wxFONTENCODING_MAX meaning not to use any fall back
+ // at all (but just fail to convert in this case) and wxFONTENCODING_SYSTEM
+ // meaning to use the encoding of the system locale
+ static wxFontEncoding GetFallbackEncoding() { return ms_defaultMBEncoding; }
+ static void SetFallbackEncoding(wxFontEncoding enc);
+ static void DisableFallbackEncoding()
+ {
+ SetFallbackEncoding(wxFONTENCODING_MAX);
+ }
- virtual ~wxConvAuto() { if ( m_conv && m_ownsConv ) delete m_conv; }
// override the base class virtual function(s) to use our m_conv
virtual size_t ToWChar(wchar_t *dst, size_t dstLen,
- const char *src, size_t srcLen = -1) const;
+ const char *src, size_t srcLen = wxNO_LEN) const;
virtual size_t FromWChar(char *dst, size_t dstLen,
- const wchar_t *src, size_t srcLen = -1) const;
+ const wchar_t *src, size_t srcLen = wxNO_LEN) const;
virtual size_t GetMBNulLen() const { return m_conv->GetMBNulLen(); }
+ virtual wxMBConv *Clone() const { return new wxConvAuto(*this); }
+
private:
// all currently recognized BOM values
enum BOMType
// return the BOM type of this buffer
static BOMType DetectBOM(const char *src, size_t srcLen);
- // initialize m_conv with the conversion to use by default (UTF-8)
- void InitWithDefault()
+ // common part of all ctors
+ void Init()
+ {
+ // no need to initialize m_bomType and m_consumedBOM here, this will be
+ // done when m_conv is created
+ m_conv = NULL;
+ m_ownsConv = false;
+ }
+
+ // initialize m_conv with the UTF-8 conversion
+ void InitWithUTF8()
{
m_conv = &wxConvUTF8;
m_ownsConv = false;
void SkipBOM(const char **src, size_t *len) const;
+ // fall-back multibyte encoding to use, may be wxFONTENCODING_SYSTEM or
+ // wxFONTENCODING_MAX but not wxFONTENCODING_DEFAULT
+ static wxFontEncoding ms_defaultMBEncoding;
+
// conversion object which we really use, NULL until the first call to
// either ToWChar() or FromWChar()
wxMBConv *m_conv;
+ // the multibyte encoding to use by default if input isn't Unicode
+ wxFontEncoding m_encDefault;
+
// our BOM type
BOMType m_bomType;
bool m_consumedBOM;
- DECLARE_NO_ASSIGN_CLASS(wxConvAuto);
+ wxDECLARE_NO_ASSIGN_CLASS(wxConvAuto);
};
#endif // wxUSE_WCHAR_T