summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-08-26 17:43:02 +0200
committerKonstantin Käfer <mail@kkaefer.com>2014-08-26 17:43:02 +0200
commit5b4ad90bac82eb31ec9ff23ebf7790027d389d5f (patch)
tree2ff0e50a876dc7126eab17d84ded611813326787 /common
parent0f73a0192e60823e49261dae2202d572be90c28b (diff)
parentf566b6595b009c1b0896d2e5a55324c4ab4e3b5c (diff)
downloadqtlocation-mapboxgl-5b4ad90bac82eb31ec9ff23ebf7790027d389d5f.tar.gz
Merge pull request #445 from mapbox/nsstring
Use NSString-specific case change functions on OS X/iOS
Diffstat (limited to 'common')
-rw-r--r--common/platform_default.cpp25
-rw-r--r--common/platform_nsstring.mm21
2 files changed, 46 insertions, 0 deletions
diff --git a/common/platform_default.cpp b/common/platform_default.cpp
new file mode 100644
index 0000000000..1acbfa8508
--- /dev/null
+++ b/common/platform_default.cpp
@@ -0,0 +1,25 @@
+#include <mbgl/platform/platform.hpp>
+
+#include <locale>
+
+namespace mbgl {
+namespace platform {
+
+std::string uppercase(const std::string& string) {
+ // TODO: Use a proper Unicode Special Casing-aware algorithm.
+ const auto &convert = std::use_facet<std::ctype<char>>(std::locale());
+ std::string converted = string;
+ convert.toupper(&converted[0], &converted[0] + converted.size());
+ return converted;
+}
+
+std::string lowercase(const std::string& string) {
+ // TODO: Use a proper Unicode Special Casing-aware algorithm.
+ const auto &convert = std::use_facet<std::ctype<char>>(std::locale());
+ std::string converted = string;
+ convert.tolower(&converted[0], &converted[0] + converted.size());
+ return converted;
+}
+
+}
+}
diff --git a/common/platform_nsstring.mm b/common/platform_nsstring.mm
new file mode 100644
index 0000000000..9119f2a8fe
--- /dev/null
+++ b/common/platform_nsstring.mm
@@ -0,0 +1,21 @@
+#import <Foundation/Foundation.h>
+
+#include <mbgl/platform/platform.hpp>
+
+namespace mbgl {
+namespace platform {
+
+std::string uppercase(const std::string &string) {
+ NSString *nsstring = [[NSString alloc] initWithBytesNoCopy:const_cast<char *>(string.data()) length:string.size() encoding:NSUTF8StringEncoding freeWhenDone:NO];
+ nsstring = [nsstring uppercaseString];
+ return { [nsstring cStringUsingEncoding:NSUTF8StringEncoding], [nsstring lengthOfBytesUsingEncoding:NSUTF8StringEncoding] };
+}
+
+std::string lowercase(const std::string &string) {
+ NSString *nsstring = [[NSString alloc] initWithBytesNoCopy:const_cast<char *>(string.data()) length:string.size() encoding:NSUTF8StringEncoding freeWhenDone:NO];
+ nsstring = [nsstring lowercaseString];
+ return { [nsstring cStringUsingEncoding:NSUTF8StringEncoding], [nsstring lengthOfBytesUsingEncoding:NSUTF8StringEncoding] };
+}
+
+}
+} \ No newline at end of file