#include "wx/strconv.h"
#include "wx/fontenc.h"
-#if wxUSE_WCHAR_T
-
// ----------------------------------------------------------------------------
// wxConvAuto: uses BOM to automatically detect input encoding
// ----------------------------------------------------------------------------
+// All currently recognized BOM values.
+enum wxBOM
+{
+ wxBOM_Unknown = -1,
+ wxBOM_None,
+ wxBOM_UTF32BE,
+ wxBOM_UTF32LE,
+ wxBOM_UTF16BE,
+ wxBOM_UTF16LE,
+ wxBOM_UTF8
+};
+
class WXDLLIMPEXP_BASE wxConvAuto : public wxMBConv
{
public:
// default ctor, the real conversion will be created on demand
wxConvAuto(wxFontEncoding enc = wxFONTENCODING_DEFAULT)
{
- m_conv = NULL; // the rest will be initialized later
+ Init();
+
m_encDefault = enc;
}
// deduced on first use
wxConvAuto(const wxConvAuto& other) : wxMBConv()
{
- m_conv = NULL;
+ Init();
+
m_encDefault = other.m_encDefault;
}
virtual wxMBConv *Clone() const { return new wxConvAuto(*this); }
-private:
- // all currently recognized BOM values
- enum BOMType
+ // return the BOM type of this buffer
+ static wxBOM DetectBOM(const char *src, size_t srcLen);
+
+ // return the characters composing the given BOM.
+ static const char* GetBOMChars(wxBOM bomType, size_t* count);
+
+ wxBOM GetBOM() const
{
- BOM_None,
- BOM_UTF32BE,
- BOM_UTF32LE,
- BOM_UTF16BE,
- BOM_UTF16LE,
- BOM_UTF8
- };
+ return m_bomType;
+ }
- // return the BOM type of this buffer
- static BOMType DetectBOM(const char *src, size_t srcLen);
+private:
+ // common part of all ctors
+ void Init()
+ {
+ // We don't initialize m_encDefault here as different ctors do it
+ // differently.
+ m_conv = NULL;
+ m_bomType = wxBOM_Unknown;
+ m_ownsConv = false;
+ m_consumedBOM = false;
+ }
// initialize m_conv with the UTF-8 conversion
void InitWithUTF8()
}
// create the correct conversion object for the given BOM type
- void InitFromBOM(BOMType bomType);
+ void InitFromBOM(wxBOM bomType);
// create the correct conversion object for the BOM present in the
- // beginning of the buffer; adjust the buffer to skip the BOM if found
- void InitFromInput(const char **src, size_t *len);
+ // beginning of the buffer
+ //
+ // return false if the buffer is too short to allow us to determine if we
+ // have BOM or not
+ bool InitFromInput(const char *src, size_t len);
// adjust src and len to skip over the BOM (identified by m_bomType) at the
// start of the buffer
wxFontEncoding m_encDefault;
// our BOM type
- BOMType m_bomType;
+ wxBOM m_bomType;
// true if we allocated m_conv ourselves, false if we just use an existing
// global conversion
bool m_consumedBOM;
- DECLARE_NO_ASSIGN_CLASS(wxConvAuto)
+ wxDECLARE_NO_ASSIGN_CLASS(wxConvAuto);
};
-#endif // wxUSE_WCHAR_T
-
#endif // _WX_CONVAUTO_H_