#include "wx/chartype.h"
#include "wx/stringimpl.h"
#include "wx/unichar.h"
+#include "wx/buffer.h"
// This header contains wxStringOperations "namespace" class that implements
// elementary operations on string data as static methods; wxString methods and
struct WXDLLIMPEXP_BASE wxStringOperationsUtf8
{
// checks correctness of UTF-8 sequence
- static bool IsValidUtf8String(const char *c);
+ static bool IsValidUtf8String(const char *c,
+ size_t len = wxStringImpl::npos);
#ifdef __WXDEBUG__
static bool IsValidUtf8LeadByte(unsigned char c);
#endif
// table of offsets to skip forward when iterating over UTF-8 sequence
- static unsigned char ms_utf8IterTable[256];
+ static const unsigned char ms_utf8IterTable[256];
template<typename Iterator>
return dist;
}
- // buffer for single UTF-8 character
- struct Utf8CharBuffer
- {
- char data[5];
- operator const char*() const { return data; }
- };
-
// encodes the character as UTF-8:
- static Utf8CharBuffer EncodeChar(const wxUniChar& ch);
+ typedef wxUniChar::Utf8CharBuffer Utf8CharBuffer;
+ static Utf8CharBuffer EncodeChar(const wxUniChar& ch)
+ { return ch.AsUTF8(); }
// returns n copies of ch encoded in UTF-8 string
static wxCharBuffer EncodeNChars(size_t n, const wxUniChar& ch);
}
// decodes single UTF-8 character from UTF-8 string
- static wxUniChar DecodeChar(wxStringImpl::const_iterator i);
+ static wxUniChar DecodeChar(wxStringImpl::const_iterator i)
+ {
+ if ( (unsigned char)*i < 0x80 )
+ return (int)*i;
+ return DecodeNonAsciiChar(i);
+ }
+
+private:
+ static wxUniChar DecodeNonAsciiChar(wxStringImpl::const_iterator i);
};
#endif // wxUSE_UNICODE_UTF8