1d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes/* 2d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * Copyright (C) 2006 The Android Open Source Project 3d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * 4d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 5d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * you may not use this file except in compliance with the License. 6d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * You may obtain a copy of the License at 7d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * 8d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * 10d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * Unless required by applicable law or agreed to in writing, software 11d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * See the License for the specific language governing permissions and 14d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes * limitations under the License. 15d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes */ 16d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes 17d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes#include "ErrorCode.h" 18d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes#include "JNIHelp.h" 19d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes#include "ScopedJavaUnicodeString.h" 20d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes#include "unicode/normlzr.h" 21d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes 22d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughesstatic jstring normalizeImpl(JNIEnv* env, jclass, jstring s, jint intMode) { 23d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes ScopedJavaUnicodeString src(env, s); 24d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes UNormalizationMode mode = static_cast<UNormalizationMode>(intMode); 25d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes UErrorCode errorCode = U_ZERO_ERROR; 26d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes UnicodeString dst; 27d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes Normalizer::normalize(src.unicodeString(), mode, 0, dst, errorCode); 28d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes icu4jni_error(env, errorCode); 29d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes return dst.isBogus() ? NULL : env->NewString(dst.getBuffer(), dst.length()); 30d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes} 31d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes 32d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughesstatic jboolean isNormalizedImpl(JNIEnv* env, jclass, jstring s, jint intMode) { 33d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes ScopedJavaUnicodeString src(env, s); 34d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes UNormalizationMode mode = static_cast<UNormalizationMode>(intMode); 35d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes UErrorCode errorCode = U_ZERO_ERROR; 36d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes UBool result = Normalizer::isNormalized(src.unicodeString(), mode, errorCode); 37d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes icu4jni_error(env, errorCode); 38d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes return result; 39d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes} 40d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes 41d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughesstatic JNINativeMethod gMethods[] = { 42d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes /* name, signature, funcPtr */ 43d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes {"normalizeImpl", "(Ljava/lang/String;I)Ljava/lang/String;", (void*) normalizeImpl}, 44d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes {"isNormalizedImpl", "(Ljava/lang/String;I)Z", (void*) isNormalizedImpl}, 45d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes}; 46d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughesextern "C" int register_com_ibm_icu4jni_text_NativeNormalizer(JNIEnv* env) { 47d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes return jniRegisterNativeMethods(env, 48d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes "com/ibm/icu4jni/text/NativeNormalizer", gMethods, NELEM(gMethods)); 49d83c3bd3b8e8bb311e83ec5aeebf2c8122343447Elliott Hughes} 50