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