From a7a285eb61dd83afc892bc1d64ffe14b9f1426a3 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 27 Sep 2009 23:51:34 +0200 Subject: Completely migrate to Unicode String class --- src/Core/String.h | 62 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 19 deletions(-) (limited to 'src/Core/String.h') diff --git a/src/Core/String.h b/src/Core/String.h index 1c93902..4694812 100644 --- a/src/Core/String.h +++ b/src/Core/String.h @@ -22,7 +22,7 @@ #include "export.h" -#include +#include #include #include #include @@ -35,25 +35,18 @@ namespace Core { class MAD_CORE_EXPORT String : public icu::UnicodeString { private: - std::string extractCodepage(const char *codepage) const { - boost::uint32_t len = static_cast(icu::UnicodeString::extract(0, length(), 0, codepage)); - - boost::scoped_array buf(new char[len]); - icu::UnicodeString::extract(0, length(), buf.get(), len, codepage); - - return std::string(buf.get(), len); - } + std::string toCodepage(const char *codepage) const; public: String() {} - String(const icu::UnicodeString &str) : icu::UnicodeString(str) {} - String(const char *str) : icu::UnicodeString(str, -1, US_INV) {} + String(const icu::UnicodeString &str) : UnicodeString(str) {} + String(const char *str) : UnicodeString(str, "") {} String substr(boost::int32_t start, boost::int32_t length = -1) const { if(length < 0) - return icu::UnicodeString(*this, start); + return UnicodeString(*this, start); else - return icu::UnicodeString(*this, start, length); + return UnicodeString(*this, start, length); } bool matches(const String &str) const { @@ -63,22 +56,53 @@ class MAD_CORE_EXPORT String : public icu::UnicodeString { boost::int32_t findFirstOf(const String &chars, boost::int32_t start = 0) const; boost::int32_t findFirstNotOf(const String &chars, boost::int32_t start = 0) const; - std::string extract() const { - return extractCodepage(0); + std::string toString() const { + return toCodepage(""); + } + + std::string toLocale() const { + return toCodepage(0); + } + + std::string toUTF8() const { + return toCodepage("UTF-8"); + } + + static String fromString(const char *str) { + return UnicodeString(str, ""); } - std::string extractUTF8() const { - return extractCodepage("UTF-8"); + static String fromString(const std::string &str) { + return fromString(str.c_str()); + } + + static String fromLocale(const char *str) { + return UnicodeString(str, static_cast(0)); + } + + static String fromLocale(const std::string &str) { + return fromLocale(str.c_str()); } static String fromUTF8(const char *str) { - return icu::UnicodeString(str, "UTF-8"); + return UnicodeString(str, "UTF-8"); + } + + static String fromUTF8(const std::string &str) { + return fromUTF8(str.c_str()); + } + + template + static String getline(std::basic_istream &stream) { + std::string input; + std::getline(stream, input); + return fromLocale(input); } }; template std::basic_ostream& operator<<(std::basic_ostream &stream, const String &string) { - stream << string.extract(); + stream << string.toLocale(); return stream; } -- cgit v1.2.3