summaryrefslogtreecommitdiffstats
path: root/unicode/unicodecpp.C
diff options
context:
space:
mode:
authorSam Varshavchik2015-07-28 08:31:30 -0400
committerSam Varshavchik2015-07-28 08:31:30 -0400
commitf9e2606abe105d7183b69e50da8a156a547d65e0 (patch)
treef0856138b2cdb568c56bd14f282476cc43556687 /unicode/unicodecpp.C
parentbc4028bbe7b3692bd0d8d5309cc425abe57fb9c0 (diff)
downloadcourier-libs-f9e2606abe105d7183b69e50da8a156a547d65e0.tar.bz2
Add additional tolower/toupper overloads, unicode_locale_charset().
Diffstat (limited to 'unicode/unicodecpp.C')
-rw-r--r--unicode/unicodecpp.C45
1 files changed, 43 insertions, 2 deletions
diff --git a/unicode/unicodecpp.C b/unicode/unicodecpp.C
index e6b31bd..214eb5d 100644
--- a/unicode/unicodecpp.C
+++ b/unicode/unicodecpp.C
@@ -57,6 +57,21 @@ const char unicode::utf_8[]="utf-8";
const char unicode::iso_8859_1[]="iso-8859-1";
+// Initialize unicode_default_chset() at thread startup.
+
+namespace unicode {
+
+ class init_chset {
+ public:
+ init_chset();
+ };
+};
+
+unicode::init_chset::init_chset()
+{
+ unicode_default_chset();
+}
+
size_t unicode_wcwidth(const std::vector<unicode_char> &uc)
{
size_t w=0;
@@ -505,11 +520,24 @@ std::string unicode::tolower(const std::string &string,
unicode::iconvert::convert(string, charset, uc);
- std::transform(uc.begin(), uc.end(), uc.begin(), unicode_lc);
+ tolower(uc);
return unicode::iconvert::convert(uc, charset);
}
+std::vector<unicode_char> unicode::tolower(const std::vector<unicode_char> &u)
+{
+ std::vector<unicode_char> copy=u;
+
+ tolower(copy);
+ return copy;
+}
+
+void unicode::tolower(std::vector<unicode_char> &uc)
+{
+ std::transform(uc.begin(), uc.end(), uc.begin(), unicode_lc);
+}
+
std::string unicode::toupper(const std::string &string)
{
return toupper(string, unicode_default_chset());
@@ -522,7 +550,20 @@ std::string unicode::toupper(const std::string &string,
unicode::iconvert::convert(string, charset, uc);
- std::transform(uc.begin(), uc.end(), uc.begin(), unicode_uc);
+ toupper(uc);
return unicode::iconvert::convert(uc, charset);
}
+
+std::vector<unicode_char> unicode::toupper(const std::vector<unicode_char> &u)
+{
+ std::vector<unicode_char> copy=u;
+
+ toupper(copy);
+ return copy;
+}
+
+void unicode::toupper(std::vector<unicode_char> &uc)
+{
+ std::transform(uc.begin(), uc.end(), uc.begin(), unicode_uc);
+}