1 ///////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxConvAuto class declaration
4 // Author: Vadim Zeitlin
7 // Copyright: (c) 2006 Vadim Zeitlin
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_CONVAUTO_H_
12 #define _WX_CONVAUTO_H_
14 #include "wx/strconv.h"
15 #include "wx/fontenc.h"
19 // ----------------------------------------------------------------------------
20 // wxConvAuto: uses BOM to automatically detect input encoding
21 // ----------------------------------------------------------------------------
23 class WXDLLIMPEXP_BASE wxConvAuto
: public wxMBConv
26 // default ctor, the real conversion will be created on demand
27 wxConvAuto(wxFontEncoding enc
= wxFONTENCODING_DEFAULT
)
34 // copy ctor doesn't initialize anything neither as conversion can only be
35 // deduced on first use
36 wxConvAuto(const wxConvAuto
& other
) : wxMBConv()
40 m_encDefault
= other
.m_encDefault
;
49 // get/set the fall-back encoding used when the input text doesn't have BOM
52 // special values are wxFONTENCODING_MAX meaning not to use any fall back
53 // at all (but just fail to convert in this case) and wxFONTENCODING_SYSTEM
54 // meaning to use the encoding of the system locale
55 static wxFontEncoding
GetFallbackEncoding() { return ms_defaultMBEncoding
; }
56 static void SetFallbackEncoding(wxFontEncoding enc
);
57 static void DisableFallbackEncoding()
59 SetFallbackEncoding(wxFONTENCODING_MAX
);
63 // override the base class virtual function(s) to use our m_conv
64 virtual size_t ToWChar(wchar_t *dst
, size_t dstLen
,
65 const char *src
, size_t srcLen
= wxNO_LEN
) const;
67 virtual size_t FromWChar(char *dst
, size_t dstLen
,
68 const wchar_t *src
, size_t srcLen
= wxNO_LEN
) const;
70 virtual size_t GetMBNulLen() const { return m_conv
->GetMBNulLen(); }
72 virtual wxMBConv
*Clone() const { return new wxConvAuto(*this); }
75 // all currently recognized BOM values
86 // return the BOM type of this buffer
87 static BOMType
DetectBOM(const char *src
, size_t srcLen
);
89 // common part of all ctors
92 // no need to initialize m_bomType and m_consumedBOM here, this will be
93 // done when m_conv is created
98 // initialize m_conv with the UTF-8 conversion
101 m_conv
= &wxConvUTF8
;
105 // create the correct conversion object for the given BOM type
106 void InitFromBOM(BOMType bomType
);
108 // create the correct conversion object for the BOM present in the
109 // beginning of the buffer; adjust the buffer to skip the BOM if found
110 void InitFromInput(const char **src
, size_t *len
);
112 // adjust src and len to skip over the BOM (identified by m_bomType) at the
113 // start of the buffer
114 void SkipBOM(const char **src
, size_t *len
) const;
117 // fall-back multibyte encoding to use, may be wxFONTENCODING_SYSTEM or
118 // wxFONTENCODING_MAX but not wxFONTENCODING_DEFAULT
119 static wxFontEncoding ms_defaultMBEncoding
;
121 // conversion object which we really use, NULL until the first call to
122 // either ToWChar() or FromWChar()
125 // the multibyte encoding to use by default if input isn't Unicode
126 wxFontEncoding m_encDefault
;
131 // true if we allocated m_conv ourselves, false if we just use an existing
135 // true if we already skipped BOM when converting (and not just calculating
140 wxDECLARE_NO_ASSIGN_CLASS(wxConvAuto
);
143 #endif // wxUSE_WCHAR_T
145 #endif // _WX_CONVAUTO_H_