]> git.saurik.com Git - wxWidgets.git/commitdiff
Use Scintilla's functions for Unicode/UTF8 conversions
authorRobin Dunn <robin@alldunn.com>
Sun, 17 Oct 2004 02:27:22 +0000 (02:27 +0000)
committerRobin Dunn <robin@alldunn.com>
Sun, 17 Oct 2004 02:27:22 +0000 (02:27 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29932 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

contrib/include/wx/stc/stc.h
contrib/src/stc/PlatWX.cpp
contrib/src/stc/stc.h.in
include/wx/stc/stc.h
src/stc/PlatWX.cpp
src/stc/stc.h.in

index 1da2e8342c96692318a12e5602a686dfb47ba616..72044be5afdcd237ff2e97a9f88bcd6c02f3b32a 100644 (file)
@@ -3109,36 +3109,26 @@ typedef void (wxEvtHandler::*wxStyledTextEventFunction)(wxStyledTextEvent&);
 // Utility functions used within wxSTC
 
 #ifndef SWIG
+#if wxUSE_UNICODE
+
+wxString stc2wx(const char* str);
+wxString stc2wx(const char* str, size_t len);
+const wxWX2MBbuf wx2stc(const wxString& str);
+
+#else // not UNICODE
 
 inline wxString stc2wx(const char* str) {
-#if wxUSE_UNICODE
-    return wxString(str, wxConvUTF8);
-#else
     return wxString(str);
-#endif
 }
-
-#if wxUSE_UNICODE
-wxString stc2wx(const char* str, size_t len);
-#else
 inline wxString stc2wx(const char* str, size_t len) {
     return wxString(str, len);
 }
-#endif
-
-
-#if wxUSE_UNICODE
-inline const wxWX2MBbuf wx2stc(const wxString& str) {
-    return str.mb_str(wxConvUTF8);
-}
-#else
 inline const wxWX2MBbuf wx2stc(const wxString& str) {
     return str.mbc_str();
 }
-#endif
-
-#endif
 
+#endif // UNICODE
+#endif // SWIG
 
 //----------------------------------------------------------------------
 #endif
index 4b983f1cd6f27ca3fa90793f15680203f6ba68be..ec10a85950ad1069da3eb6347d6005240671c3cd 100644 (file)
@@ -1249,25 +1249,47 @@ double ElapsedTime::Duration(bool reset) {
 //----------------------------------------------------------------------
 
 #if wxUSE_UNICODE
+
+#include "UniConversion.h"
+
+// Convert using Scintilla's functions instead of wx's, Scintilla's are more
+// forgiving and won't assert...
+    
 wxString stc2wx(const char* str, size_t len)
 {
-    // note: we assume that str is of length len not including the terminating null.
-
     if (!len)
         return wxEmptyString;
-    else if (str[len-1] == 0)
-        // It's already terminated correctly.
-        return wxString(str, wxConvUTF8, len);
 
-    char *buffer=new char[len+1];
-    strncpy(buffer, str, len);
-    buffer[len]=0;
+    size_t wclen = UCS2Length(str, len);
+    wxWCharBuffer buffer(wclen+1);
+
+    size_t actualLen = UCS2FromUTF8(str, len, buffer.data(), wclen+1);
+    return wxString(buffer.data(), actualLen);
+}
+
 
-    wxString cstr(buffer, wxConvUTF8, len);
 
-    delete[] buffer;
-    return cstr;
+wxString stc2wx(const char* str)
+{
+    return stc2wx(str, strlen(str));
 }
+
+
+const wxWX2MBbuf wx2stc(const wxString& str)
+{
+    const wchar_t* wcstr = str.c_str();
+    size_t wclen         = str.length();
+    size_t len           = UTF8Length(wcstr, wclen);
+
+    wxCharBuffer buffer(len+1);
+    UTF8FromUCS2(wcstr, wclen, buffer.data(), len);
+
+    // TODO check NULL termination!!
+
+    
+    return buffer;
+}
+
 #endif
 
 
index c74907d01f0cca568938851710488639cdbcaad0..e48912f1c462cecbef754fc47c047dc82d5b4d29 100644 (file)
@@ -463,36 +463,26 @@ typedef void (wxEvtHandler::*wxStyledTextEventFunction)(wxStyledTextEvent&);
 // Utility functions used within wxSTC
 
 #ifndef SWIG
+#if wxUSE_UNICODE
+
+wxString stc2wx(const char* str);
+wxString stc2wx(const char* str, size_t len);
+const wxWX2MBbuf wx2stc(const wxString& str);
+
+#else // not UNICODE
 
 inline wxString stc2wx(const char* str) {
-#if wxUSE_UNICODE
-    return wxString(str, wxConvUTF8);
-#else
     return wxString(str);
-#endif
 }
-
-#if wxUSE_UNICODE
-wxString stc2wx(const char* str, size_t len);
-#else
 inline wxString stc2wx(const char* str, size_t len) {
     return wxString(str, len);
 }
-#endif
-
-
-#if wxUSE_UNICODE
-inline const wxWX2MBbuf wx2stc(const wxString& str) {
-    return str.mb_str(wxConvUTF8);
-}
-#else
 inline const wxWX2MBbuf wx2stc(const wxString& str) {
     return str.mbc_str();
 }
-#endif
-
-#endif
 
+#endif // UNICODE
+#endif // SWIG
 
 //----------------------------------------------------------------------
 #endif
index 1da2e8342c96692318a12e5602a686dfb47ba616..72044be5afdcd237ff2e97a9f88bcd6c02f3b32a 100644 (file)
@@ -3109,36 +3109,26 @@ typedef void (wxEvtHandler::*wxStyledTextEventFunction)(wxStyledTextEvent&);
 // Utility functions used within wxSTC
 
 #ifndef SWIG
+#if wxUSE_UNICODE
+
+wxString stc2wx(const char* str);
+wxString stc2wx(const char* str, size_t len);
+const wxWX2MBbuf wx2stc(const wxString& str);
+
+#else // not UNICODE
 
 inline wxString stc2wx(const char* str) {
-#if wxUSE_UNICODE
-    return wxString(str, wxConvUTF8);
-#else
     return wxString(str);
-#endif
 }
-
-#if wxUSE_UNICODE
-wxString stc2wx(const char* str, size_t len);
-#else
 inline wxString stc2wx(const char* str, size_t len) {
     return wxString(str, len);
 }
-#endif
-
-
-#if wxUSE_UNICODE
-inline const wxWX2MBbuf wx2stc(const wxString& str) {
-    return str.mb_str(wxConvUTF8);
-}
-#else
 inline const wxWX2MBbuf wx2stc(const wxString& str) {
     return str.mbc_str();
 }
-#endif
-
-#endif
 
+#endif // UNICODE
+#endif // SWIG
 
 //----------------------------------------------------------------------
 #endif
index 4b983f1cd6f27ca3fa90793f15680203f6ba68be..ec10a85950ad1069da3eb6347d6005240671c3cd 100644 (file)
@@ -1249,25 +1249,47 @@ double ElapsedTime::Duration(bool reset) {
 //----------------------------------------------------------------------
 
 #if wxUSE_UNICODE
+
+#include "UniConversion.h"
+
+// Convert using Scintilla's functions instead of wx's, Scintilla's are more
+// forgiving and won't assert...
+    
 wxString stc2wx(const char* str, size_t len)
 {
-    // note: we assume that str is of length len not including the terminating null.
-
     if (!len)
         return wxEmptyString;
-    else if (str[len-1] == 0)
-        // It's already terminated correctly.
-        return wxString(str, wxConvUTF8, len);
 
-    char *buffer=new char[len+1];
-    strncpy(buffer, str, len);
-    buffer[len]=0;
+    size_t wclen = UCS2Length(str, len);
+    wxWCharBuffer buffer(wclen+1);
+
+    size_t actualLen = UCS2FromUTF8(str, len, buffer.data(), wclen+1);
+    return wxString(buffer.data(), actualLen);
+}
+
 
-    wxString cstr(buffer, wxConvUTF8, len);
 
-    delete[] buffer;
-    return cstr;
+wxString stc2wx(const char* str)
+{
+    return stc2wx(str, strlen(str));
 }
+
+
+const wxWX2MBbuf wx2stc(const wxString& str)
+{
+    const wchar_t* wcstr = str.c_str();
+    size_t wclen         = str.length();
+    size_t len           = UTF8Length(wcstr, wclen);
+
+    wxCharBuffer buffer(len+1);
+    UTF8FromUCS2(wcstr, wclen, buffer.data(), len);
+
+    // TODO check NULL termination!!
+
+    
+    return buffer;
+}
+
 #endif
 
 
index c74907d01f0cca568938851710488639cdbcaad0..e48912f1c462cecbef754fc47c047dc82d5b4d29 100644 (file)
@@ -463,36 +463,26 @@ typedef void (wxEvtHandler::*wxStyledTextEventFunction)(wxStyledTextEvent&);
 // Utility functions used within wxSTC
 
 #ifndef SWIG
+#if wxUSE_UNICODE
+
+wxString stc2wx(const char* str);
+wxString stc2wx(const char* str, size_t len);
+const wxWX2MBbuf wx2stc(const wxString& str);
+
+#else // not UNICODE
 
 inline wxString stc2wx(const char* str) {
-#if wxUSE_UNICODE
-    return wxString(str, wxConvUTF8);
-#else
     return wxString(str);
-#endif
 }
-
-#if wxUSE_UNICODE
-wxString stc2wx(const char* str, size_t len);
-#else
 inline wxString stc2wx(const char* str, size_t len) {
     return wxString(str, len);
 }
-#endif
-
-
-#if wxUSE_UNICODE
-inline const wxWX2MBbuf wx2stc(const wxString& str) {
-    return str.mb_str(wxConvUTF8);
-}
-#else
 inline const wxWX2MBbuf wx2stc(const wxString& str) {
     return str.mbc_str();
 }
-#endif
-
-#endif
 
+#endif // UNICODE
+#endif // SWIG
 
 //----------------------------------------------------------------------
 #endif