1 ///////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxConvAuto class declaration
4 // Author: Vadim Zeitlin
6 // Copyright: (c) 2006 Vadim Zeitlin
7 // Licence: wxWindows licence
8 ///////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_CONVAUTO_H_
11 #define _WX_CONVAUTO_H_
13 #include "wx/strconv.h"
14 #include "wx/fontenc.h"
16 // ----------------------------------------------------------------------------
17 // wxConvAuto: uses BOM to automatically detect input encoding
18 // ----------------------------------------------------------------------------
20 // All currently recognized BOM values.
32 class WXDLLIMPEXP_BASE wxConvAuto
: public wxMBConv
35 // default ctor, the real conversion will be created on demand
36 wxConvAuto(wxFontEncoding enc
= wxFONTENCODING_DEFAULT
)
43 // copy ctor doesn't initialize anything neither as conversion can only be
44 // deduced on first use
45 wxConvAuto(const wxConvAuto
& other
) : wxMBConv()
49 m_encDefault
= other
.m_encDefault
;
58 // get/set the fall-back encoding used when the input text doesn't have BOM
61 // special values are wxFONTENCODING_MAX meaning not to use any fall back
62 // at all (but just fail to convert in this case) and wxFONTENCODING_SYSTEM
63 // meaning to use the encoding of the system locale
64 static wxFontEncoding
GetFallbackEncoding() { return ms_defaultMBEncoding
; }
65 static void SetFallbackEncoding(wxFontEncoding enc
);
66 static void DisableFallbackEncoding()
68 SetFallbackEncoding(wxFONTENCODING_MAX
);
72 // override the base class virtual function(s) to use our m_conv
73 virtual size_t ToWChar(wchar_t *dst
, size_t dstLen
,
74 const char *src
, size_t srcLen
= wxNO_LEN
) const;
76 virtual size_t FromWChar(char *dst
, size_t dstLen
,
77 const wchar_t *src
, size_t srcLen
= wxNO_LEN
) const;
79 virtual size_t GetMBNulLen() const { return m_conv
->GetMBNulLen(); }
81 virtual wxMBConv
*Clone() const { return new wxConvAuto(*this); }
83 // return the BOM type of this buffer
84 static wxBOM
DetectBOM(const char *src
, size_t srcLen
);
86 // return the characters composing the given BOM.
87 static const char* GetBOMChars(wxBOM bomType
, size_t* count
);
95 // common part of all ctors
98 // We don't initialize m_encDefault here as different ctors do it
101 m_bomType
= wxBOM_Unknown
;
103 m_consumedBOM
= false;
106 // initialize m_conv with the UTF-8 conversion
109 m_conv
= &wxConvUTF8
;
113 // create the correct conversion object for the given BOM type
114 void InitFromBOM(wxBOM bomType
);
116 // create the correct conversion object for the BOM present in the
117 // beginning of the buffer
119 // return false if the buffer is too short to allow us to determine if we
121 bool InitFromInput(const char *src
, size_t len
);
123 // adjust src and len to skip over the BOM (identified by m_bomType) at the
124 // start of the buffer
125 void SkipBOM(const char **src
, size_t *len
) const;
128 // fall-back multibyte encoding to use, may be wxFONTENCODING_SYSTEM or
129 // wxFONTENCODING_MAX but not wxFONTENCODING_DEFAULT
130 static wxFontEncoding ms_defaultMBEncoding
;
132 // conversion object which we really use, NULL until the first call to
133 // either ToWChar() or FromWChar()
136 // the multibyte encoding to use by default if input isn't Unicode
137 wxFontEncoding m_encDefault
;
142 // true if we allocated m_conv ourselves, false if we just use an existing
146 // true if we already skipped BOM when converting (and not just calculating
151 wxDECLARE_NO_ASSIGN_CLASS(wxConvAuto
);
154 #endif // _WX_CONVAUTO_H_