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 | |
parent | 98a3c0aaba0cd94a3c0aa59836388429a04cbcd1 (diff) | |
download | qtlocation-mapboxgl-upstream/tvn-remove-nunicode-2.tar.gz |
[android] - add platform specific implementation of unaccentupstream/tvn-remove-nunicode-2
-rw-r--r-- | platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/render/RenderTestActivity.java | 3 | ||||
-rw-r--r-- | platform/android/config.cmake | 3 | ||||
-rw-r--r-- | platform/android/core-files.txt | 2 | ||||
-rw-r--r-- | platform/android/scripts/run-render-test.py | 2 | ||||
-rw-r--r-- | platform/android/src/java/lang.cpp | 14 | ||||
-rw-r--r-- | platform/android/src/java/lang.hpp | 12 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 2 | ||||
-rw-r--r-- | platform/android/src/text/collator.cpp | 40 | ||||
-rw-r--r-- | platform/android/src/text/collator_jni.hpp | 30 | ||||
-rw-r--r-- | platform/android/src/unaccent.cpp | 20 |
10 files changed, 122 insertions, 6 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/render/RenderTestActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/render/RenderTestActivity.java index e3c5254805..7bbaed192f 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/render/RenderTestActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/render/RenderTestActivity.java @@ -56,6 +56,7 @@ public class RenderTestActivity extends AppCompatActivity { add("overlapping,raster-masking"); add("missing,raster-loading"); add("pitchAndBearing,line-pitch"); + add("overdraw,sparse-tileset"); } }; @@ -292,7 +293,7 @@ public class RenderTestActivity extends AppCompatActivity { } public void onLoadIgnoreList(List<String> ignoreList) { - Timber.e("We loaded %s amount of tests to be ignored", ignoreList.size()); + Timber.e("We loaded %s of tests to be ignored", ignoreList.size()); EXCLUDED_TESTS.addAll(ignoreList); new LoadRenderDefinitionTask(this).execute(); } diff --git a/platform/android/config.cmake b/platform/android/config.cmake index 714d566bd8..954b4e8faa 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -1,7 +1,5 @@ set(USE_GLES2 ON) -include(cmake/nunicode.cmake) - # Build thin archives. set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> cruT <TARGET> <LINK_FLAGS> <OBJECTS>") set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> cruT <TARGET> <LINK_FLAGS> <OBJECTS>") @@ -48,7 +46,6 @@ macro(mbgl_platform_core) target_add_mason_package(mbgl-core PRIVATE icu) target_link_libraries(mbgl-core - PRIVATE nunicode PUBLIC expected PUBLIC -llog PUBLIC -landroid diff --git a/platform/android/core-files.txt b/platform/android/core-files.txt index 9c314fad9f..7a2a94f84a 100644 --- a/platform/android/core-files.txt +++ b/platform/android/core-files.txt @@ -14,7 +14,7 @@ platform/android/src/thread.cpp platform/android/src/string_util.cpp platform/default/bidi.cpp platform/default/thread_local.cpp -platform/default/unaccent.cpp +platform/android/src/unaccent.cpp platform/default/unaccent.hpp platform/default/utf.cpp diff --git a/platform/android/scripts/run-render-test.py b/platform/android/scripts/run-render-test.py index 1a7289a116..940ae7a3df 100644 --- a/platform/android/scripts/run-render-test.py +++ b/platform/android/scripts/run-render-test.py @@ -3,7 +3,7 @@ import os import shutil -catPath = os.getcwd() + "/platform/android/build/render-test/render/" +catPath = os.getcwd() + "/platform/android/build/render-test/" failCounter = 0 testCounter = 0 for cat in os.listdir(catPath): diff --git a/platform/android/src/java/lang.cpp b/platform/android/src/java/lang.cpp index 9e98410448..47bdc451c5 100644 --- a/platform/android/src/java/lang.cpp +++ b/platform/android/src/java/lang.cpp @@ -5,6 +5,15 @@ namespace android { namespace java { namespace lang { +// CharSequence + +void CharSequence::registerNative(jni::JNIEnv &env) { + // Lookup the class + javaClass = *jni::Class<CharSequence>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<CharSequence> CharSequence::javaClass; + // String jni::String String::toUpperCase(JNIEnv& env, jni::String value) { @@ -17,6 +26,11 @@ jni::String String::toLowerCase(JNIEnv& env, jni::String value) { return value.Call(env, method); } +jni::String String::replaceAll(JNIEnv& env, jni::String value, jni::String regex, jni::String replaceValue) { + static auto method = javaClass.GetMethod<jni::String (jni::String, jni::String)>(env, "replaceAll"); + return value.Call(env, method, regex, replaceValue); +} + void String::registerNative(jni::JNIEnv& env) { // Lookup the class javaClass = *jni::Class<jni::StringTag>::Find(env).NewGlobalRef(env).release(); diff --git a/platform/android/src/java/lang.hpp b/platform/android/src/java/lang.hpp index 893d84dad1..0f3d650095 100644 --- a/platform/android/src/java/lang.hpp +++ b/platform/android/src/java/lang.hpp @@ -8,12 +8,24 @@ namespace android { namespace java { namespace lang { + +class CharSequence : private mbgl::util::noncopyable { +public: + static constexpr auto Name() { return "java/lang/CharSequence"; }; + + static jni::Class<CharSequence> javaClass; + + static void registerNative(jni::JNIEnv&); +}; + class String : private mbgl::util::noncopyable { public: static jni::String toUpperCase(JNIEnv&, jni::String); static jni::String toLowerCase(JNIEnv&, jni::String); + static jni::String replaceAll(JNIEnv&, jni::String, jni::String, jni::String); + static jni::Class<jni::StringTag> javaClass; static void registerNative(jni::JNIEnv&); diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index af1df5282c..08f9b55689 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -121,6 +121,7 @@ void registerNatives(JavaVM *vm) { java::lang::Double::registerNative(env); java::lang::Long::registerNative(env); java::lang::String::registerNative(env); + java::lang::CharSequence::registerNative(env); // GeoJSON geojson::Feature::registerNative(env); @@ -194,6 +195,7 @@ void registerNatives(JavaVM *vm) { LocalGlyphRasterizer::registerNative(env); Locale::registerNative(env); Collator::registerNative(env); + Normalizer::registerNative(env); // Logger Logger::registerNative(env); 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(); } diff --git a/platform/android/src/text/collator_jni.hpp b/platform/android/src/text/collator_jni.hpp index 96c381b1c1..f40dc83f4e 100644 --- a/platform/android/src/text/collator_jni.hpp +++ b/platform/android/src/text/collator_jni.hpp @@ -53,5 +53,35 @@ public: }; +class Normalizer { +public: + class Form { + public: + static constexpr auto Name() { return "java/text/Normalizer$Form"; }; + + enum Value { + NFC, + NFD, + NFKC, + NFKD, + }; + + static jni::Object<Form> create(jni::JNIEnv&, Value); + + static jni::Class<Form> javaClass; + + static void registerNative(jni::JNIEnv&); + }; + + static constexpr auto Name() { return "java/text/Normalizer"; }; + + static jni::String normalize(jni::JNIEnv&, jni::String); + + static jni::Class<Normalizer> javaClass; + + static void registerNative(jni::JNIEnv&); + +}; + } // namespace android } // namespace mbgl diff --git a/platform/android/src/unaccent.cpp b/platform/android/src/unaccent.cpp new file mode 100644 index 0000000000..ad804b3aae --- /dev/null +++ b/platform/android/src/unaccent.cpp @@ -0,0 +1,20 @@ +#include <unaccent.hpp> +#include <string> +#include <src/java/lang.hpp> +#include "attach_env.hpp" +#include "text/collator_jni.hpp" + +namespace mbgl { +namespace platform { + +std::string unaccent(const std::string& str) { + android::UniqueEnv env = android::AttachEnv(); + jni::String normalized = android::Normalizer::normalize(*env,jni::Make<jni::String>(*env, str)); + jni::String unaccented = android::java::lang::String::replaceAll(*env, normalized, + jni::Make<jni::String>(*env, "\\p{InCombiningDiacriticalMarks}+"), + jni::Make<jni::String>(*env, "")); + return jni::Make<std::string>(*env, unaccented); +} + +} // namespace platform +} // namespace mbgl |