summaryrefslogtreecommitdiff
path: root/platform/android/src/text/collator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/text/collator.cpp')
-rw-r--r--platform/android/src/text/collator.cpp40
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();
}