]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/convauto.h
support SDK < 10.6, fixes #14902
[wxWidgets.git] / include / wx / convauto.h
index 398888a7884a4bae9064531216bca2ade7c1b956..25019a55e55fa52866c1405212f4bfe37e8dc894 100644 (file)
 #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_