X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/01a9232b5e06fc1e24cbd051661d37a46827379d..3678169caab0f713415414dce013a638305f3cce:/include/wx/convauto.h diff --git a/include/wx/convauto.h b/include/wx/convauto.h index 398888a788..25019a55e5 100644 --- a/include/wx/convauto.h +++ b/include/wx/convauto.h @@ -14,19 +14,30 @@ #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; } @@ -34,7 +45,8 @@ public: // deduced on first use wxConvAuto(const wxConvAuto& other) : wxMBConv() { - m_conv = NULL; + Init(); + m_encDefault = other.m_encDefault; } @@ -69,20 +81,28 @@ public: 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() @@ -92,11 +112,14 @@ private: } // 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 @@ -115,7 +138,7 @@ private: 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 @@ -126,10 +149,8 @@ private: bool m_consumedBOM; - DECLARE_NO_ASSIGN_CLASS(wxConvAuto) + wxDECLARE_NO_ASSIGN_CLASS(wxConvAuto); }; -#endif // wxUSE_WCHAR_T - #endif // _WX_CONVAUTO_H_