summaryrefslogtreecommitdiffstats
path: root/unicode/unicodecpp.C
diff options
context:
space:
mode:
authorSam Varshavchik2015-07-27 08:33:57 -0400
committerSam Varshavchik2015-07-27 08:33:57 -0400
commitbc4028bbe7b3692bd0d8d5309cc425abe57fb9c0 (patch)
tree50e5120dc3f531986191cae69921925d3323fdea /unicode/unicodecpp.C
parent9827d1dcf469fd4d715ad115a573c7c00218dd01 (diff)
downloadcourier-libs-bc4028bbe7b3692bd0d8d5309cc425abe57fb9c0.tar.bz2
Add tolower, toupper.
Diffstat (limited to 'unicode/unicodecpp.C')
-rw-r--r--unicode/unicodecpp.C36
1 files changed, 36 insertions, 0 deletions
diff --git a/unicode/unicodecpp.C b/unicode/unicodecpp.C
index 8894f1e..e6b31bd 100644
--- a/unicode/unicodecpp.C
+++ b/unicode/unicodecpp.C
@@ -7,6 +7,8 @@
#include "unicode_config.h"
#include "courier-unicode.h"
+#include <algorithm>
+
extern "C" {
static int iconv_trampoline(const char *str, size_t cnt, void *arg)
@@ -490,3 +492,37 @@ size_t unicode::wordbreakscan::finish()
}
return n;
}
+
+std::string unicode::tolower(const std::string &string)
+{
+ return tolower(string, unicode_default_chset());
+}
+
+std::string unicode::tolower(const std::string &string,
+ const std::string &charset)
+{
+ std::vector<unicode_char> uc;
+
+ unicode::iconvert::convert(string, charset, uc);
+
+ std::transform(uc.begin(), uc.end(), uc.begin(), unicode_lc);
+
+ return unicode::iconvert::convert(uc, charset);
+}
+
+std::string unicode::toupper(const std::string &string)
+{
+ return toupper(string, unicode_default_chset());
+}
+
+std::string unicode::toupper(const std::string &string,
+ const std::string &charset)
+{
+ std::vector<unicode_char> uc;
+
+ unicode::iconvert::convert(string, charset, uc);
+
+ std::transform(uc.begin(), uc.end(), uc.begin(), unicode_uc);
+
+ return unicode::iconvert::convert(uc, charset);
+}