]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/strvararg.cpp
Escape slashes.
[wxWidgets.git] / src / common / strvararg.cpp
index e3435e67133fb9c69c72199bcc53051e6a4e8150..81288c6f8943f918ebfd4ff2362691bf39909535 100644 (file)
 // implementation
 // ============================================================================
 
-const wxArgNativeCharType *wxArgNormalizer<const wxCStrData&>::get() const
+const wxChar *wxArgNormalizer<const wxCStrData&>::get() const
 {
+    // FIXME-UTF8: use some way that doesn't involve implicit conversion,
+    //             so that we deallocate any converted buffer immediately;
+    //             can't use AsString() because it returns wxString and not
+    //             const wxString&, unfortunately; use As[W]CharBuf() when
+    //             available.
     return m_value;
 }
 
-const wxArgNativeCharType *wxArgNormalizer<const wxString&>::get() const
+const wxChar *wxArgNormalizer<const wxString&>::get() const
 {
-    return m_value.c_str();
+#if wxUSE_UNICODE_UTF8 // FIXME-UTF8
+    return (const wxChar*)m_value;
+#else
+    return m_value.wx_str();
+#endif
 }
 
-#if wxUSE_UNICODE_WCHAR
-
+#if wxUSE_UNICODE // FIXME-UTF8: should be wxUSE_UNICODE_WCHAR
 wxArgNormalizer<const char*>::wxArgNormalizer(const char *value)
 {
+    // FIXME-UTF8: move this to the header so that m_value doesn't have
+    //             to be dynamically allocated
     m_value = new wxWCharBuffer(wxConvLibc.cMB2WC(value));
 }
 
@@ -58,12 +68,17 @@ const wchar_t *wxArgNormalizer<const char*>::get() const
 {
     return m_value->data();
 }
+#endif // wxUSE_UNICODE_WCHAR
 
-#elif wxUSE_WCHAR_T // !wxUSE_UNICODE_WCHAR && wxUSE_WCHAR_T
 
+#if /*wxUSE_UNICODE_UTF8 ||*/ !wxUSE_UNICODE // FIXME-UTF8
 wxArgNormalizer<const wchar_t*>::wxArgNormalizer(const wchar_t *value)
 {
+#if wxUSE_UNICODE_UTF8 // FIXME-UTF8: this will be the only case
+    m_value = new wxCharBuffer(wxConvUTF8.cWC2MB(value));
+#else
     m_value = new wxCharBuffer(wxConvLibc.cWC2MB(value));
+#endif
 }
 
 wxArgNormalizer<const wchar_t*>::~wxArgNormalizer()
@@ -75,5 +90,50 @@ const char *wxArgNormalizer<const wchar_t*>::get() const
 {
     return m_value->data();
 }
+#endif // wxUSE_UNICODE_UTF8 || !wxUSE_UNICODE
+
+#if 0 // wxUSE_UNICODE_UTF8 - FIXME-UTF8
+wxArgNormalizer<const char*>::wxArgNormalizer(const char *value)
+{
+    // FIXME-UTF8: move this to the header so that m_value doesn't have
+    //             to be dynamically allocated
+    // FIXME-UTF8: optimize this if current locale is UTF-8 one
+
+    // convert to widechar string first:
+    wxWCharBuffer buf(wxConvLibc.cMB2WC(value));
+
+    if ( buf )
+    {
+        // then to UTF-8:
+        m_value = new wxCharBuffer(wxConvUTF8.cWC2MB(value));
+    }
+    else
+    {
+        m_value = new wxCharBuffer();
+    }
+}
+
+wxArgNormalizer<const char*>::~wxArgNormalizer()
+{
+    delete m_value;
+}
 
-#endif // wxUSE_UNICODE_WCHAR / !wxUSE_UNICODE_WCHAR && wxUSE_WCHAR_T
+const char *wxArgNormalizer<const char*>::get() const
+{
+    return m_value->data();
+}
+#endif // wxUSE_UNICODE_UTF8
+
+
+
+// FIXME-UTF8: move this to the header once it's possible to include buffer.h
+//             without including wxcrt.h
+wxArgNormalizer<wxCharBuffer>::wxArgNormalizer(const wxCharBuffer& buf)
+    : wxArgNormalizer<const char*>(buf.data())
+{
+}
+
+wxArgNormalizer<wxWCharBuffer>::wxArgNormalizer(const wxWCharBuffer& buf)
+    : wxArgNormalizer<const wchar_t*>(buf.data())
+{
+}