diff options
author | tobrun <tobrun.van.nuland@gmail.com> | 2018-09-03 11:58:54 +0200 |
---|---|---|
committer | tobrun <tobrun.van.nuland@gmail.com> | 2018-09-05 14:34:51 +0200 |
commit | d196f527927f34fbca7c03a3023cd7c85e0aa59b (patch) | |
tree | 27dc261efee5353a0a3e58e8e7fa5844123ead7a /platform/android/src/text/collator.cpp | |
parent | 98a3c0aaba0cd94a3c0aa59836388429a04cbcd1 (diff) | |
download | qtlocation-mapboxgl-upstream/tvn-remove-nunicode-2.tar.gz |
[android] - add platform specific implementation of unaccentupstream/tvn-remove-nunicode-2
Diffstat (limited to 'platform/android/src/text/collator.cpp')
-rw-r--r-- | platform/android/src/text/collator.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/platform/android/src/text/collator.cpp b/platform/android/src/text/collator.cpp index 37af0a1c5b..1f795427ad 100644 --- a/platform/android/src/text/collator.cpp +++ b/platform/android/src/text/collator.cpp @@ -5,6 +5,7 @@ #include <unaccent.hpp> #include <jni/jni.hpp> +#include "src/java/lang.hpp" #include "../attach_env.hpp" #include "collator_jni.hpp" @@ -36,6 +37,45 @@ jni::jint Collator::compare(jni::JNIEnv& env, jni::Object<Collator> collator, jn return collator.Call(env, method, lhs, rhs); } +void Normalizer::Form::registerNative(jni::JNIEnv& env) { + javaClass = *jni::Class<Form>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<Normalizer::Form> Normalizer::Form::javaClass; + +jni::Object<Normalizer::Form> Normalizer::Form::create(jni::JNIEnv& env, Value value) { + switch (value) { + case NFC: + return javaClass.Get(env, + jni::StaticField<Form, jni::Object<Form>>(env, javaClass, "NFC")); + case NFKC: + return javaClass.Get(env, + jni::StaticField<Form, jni::Object<Form>>(env, javaClass, "NFKC")); + case NFD: + return javaClass.Get(env, + jni::StaticField<Form, jni::Object<Form>>(env, javaClass, "NFD")); + case NFKD: + return javaClass.Get(env, + jni::StaticField<Form, jni::Object<Form>>(env, javaClass, "NFKD")); + default: + throw std::runtime_error("invalid enum value for Normalizer.Form"); + } +} + +void Normalizer::registerNative(jni::JNIEnv& env) { + javaClass = *jni::Class<Normalizer>::Find(env).NewGlobalRef(env).release(); + Form::registerNative(env); +} + +jni::Class<Normalizer> Normalizer::javaClass; + +jni::String Normalizer::normalize(jni::JNIEnv& env, jni::String value) { + using Signature = jni::String(jni::Object<java::lang::CharSequence>,jni::Object<Normalizer::Form>); + auto charSequence = jni::Cast(env, value, java::lang::CharSequence::javaClass); + auto method = javaClass.GetStaticMethod<Signature>(env, "normalize"); + return javaClass.Call(env, method, charSequence, Form::create(env, Form::NFD)); +} + void Locale::registerNative(jni::JNIEnv& env) { javaClass = *jni::Class<Locale>::Find(env).NewGlobalRef(env).release(); } |