1dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak/*
2dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * Copyright 2015 Google Inc.
3dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak *
4dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * This code is free software; you can redistribute it and/or modify it
5dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * under the terms of the GNU General Public License version 2 only, as
6dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * published by the Free Software Foundation.  Google designates this
7dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * particular file as subject to the "Classpath" exception as provided
8dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * by Google in the LICENSE file that accompanied this code.
9dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak *
10dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * This code is distributed in the hope that it will be useful, but WITHOUT
11dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * version 2 for more details (a copy is included in the LICENSE file that
14dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * accompanied this code).
15dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak *
16dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * You should have received a copy of the GNU General Public License version
17dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * 2 along with this work; if not, write to the Free Software Foundation,
18dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak */
20dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
21dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#include "jni.h"
22dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#include "jvm.h"
23dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#include "JNIHelp.h"
24dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#include "unicode/uchar.h"
25dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#include "unicode/uscript.h"
26dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#include <math.h>
27dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#include <stdio.h> // For BUFSIZ
28dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
29dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak#define NATIVE_METHOD(className, functionName, signature) \
30dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak{ #functionName, signature, (void*)(className ## _ ## functionName) }
31dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
32dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
33dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isLowerCaseImpl(JNIEnv* env, jclass, jint codePoint) {
34dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_islower(codePoint);
35dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
36dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
37dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
38dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isUpperCaseImpl(JNIEnv* env, jclass, jint codePoint) {
39dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isupper(codePoint);
40dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
41dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
42dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
43dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isTitleCaseImpl(JNIEnv* env, jclass, jint codePoint) {
44dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_istitle(codePoint);
45dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
46dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
47dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
48dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isDigitImpl(JNIEnv* env, jclass, jint codePoint) {
49dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isdigit(codePoint);
50dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
51dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
52dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
53dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isLetterImpl(JNIEnv* env, jclass, jint codePoint) {
54dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isalpha(codePoint);
55dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
56dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
57dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
58dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isLetterOrDigitImpl(JNIEnv* env, jclass, jint codePoint) {
59dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isalnum(codePoint);
60dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
61dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
62dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
63dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isAlphabeticImpl(JNIEnv* env, jclass, jint codePoint) {
64dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_hasBinaryProperty(codePoint, UCHAR_ALPHABETIC);
65dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
66dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
67dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
68dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isIdeographicImpl(JNIEnv* env, jclass, jint codePoint) {
69dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_hasBinaryProperty(codePoint, UCHAR_IDEOGRAPHIC);
70dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
71dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
72dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jint JNICALL
73dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_getTypeImpl(JNIEnv* env, jclass, jint codePoint) {
74dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_charType(codePoint);
75dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
76dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
77dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
78dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isUnicodeIdentifierStartImpl(JNIEnv* env, jclass, jint codePoint) {
79dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isIDStart(codePoint);
80dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
81dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
82dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
83dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isUnicodeIdentifierPartImpl(JNIEnv* env, jclass, jint codePoint) {
84dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isIDPart(codePoint);
85dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
86dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
87dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jint JNICALL
88dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_toLowerCaseImpl(JNIEnv* env, jclass, jint codePoint) {
89dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_tolower(codePoint);
90dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
91dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
92dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jint JNICALL
93dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_toUpperCaseImpl(JNIEnv* env, jclass, jint codePoint) {
94dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_toupper(codePoint);
95dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
96dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
97dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jint JNICALL
98dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_toTitleCaseImpl(JNIEnv* env, jclass, jint codePoint) {
99dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_totitle(codePoint);
100dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
101dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
102dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jint JNICALL
103dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_digitImpl(JNIEnv* env, jclass, jint codePoint, jint radix) {
104dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_digit(codePoint, radix);
105dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
106dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
107dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jint JNICALL
108dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_getNumericValueImpl(JNIEnv* env, jclass, jint codePoint) {
109dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  double result = u_getNumericValue(codePoint);
110dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  if (result == U_NO_NUMERIC_VALUE) {
111dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    return -1;
112dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  } else if (result < 0 || floor(result + 0.5) != result) {
113dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    return -2;
114dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  }
115dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return static_cast<jint>(result);
116dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
117dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
118dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
119dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isWhitespaceImpl(JNIEnv* env, jclass, jint codePoint) {
120dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isWhitespace(codePoint);
121dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
122dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
123dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jbyte JNICALL
124dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_getDirectionalityImpl(JNIEnv* env, jclass, jint codePoint) {
125dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_charDirection(codePoint);
126dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
127dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
128dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
129dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isMirroredImpl(JNIEnv* env, jclass, jint codePoint) {
130dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isMirrored(codePoint);
131dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
132dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
133dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
134dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isDefinedImpl(JNIEnv* env, jclass, jint codePoint) {
135dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  return u_isdefined(codePoint);
136dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
137dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
138dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
139dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isIdentifierIgnorableImpl(JNIEnv* env, jclass, jint codePoint) {
140dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    return u_isIDIgnorable(codePoint);
141dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
142dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
143dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jboolean JNICALL
144dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_isSpaceCharImpl(JNIEnv*, jclass, jint codePoint) {
145dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    return u_isJavaSpaceChar(codePoint);
146dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
147dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
148dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakJNIEXPORT jstring JNICALL
149dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw SzczepaniakCharacter_getNameImpl(JNIEnv* env, jclass, jint codePoint) {
150dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    // U_UNICODE_CHAR_NAME gives us the modern names for characters. For control characters,
151dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    // we need U_EXTENDED_CHAR_NAME to get "NULL" rather than "BASIC LATIN 0" and so on.
152dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    // We could just use U_EXTENDED_CHAR_NAME except that it returns strings for characters
153dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    // that aren't unassigned but that don't have names, and those strings aren't in the form
154dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    // Java specifies.
155dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    bool isControl = (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f));
156dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    UCharNameChoice nameType = isControl ? U_EXTENDED_CHAR_NAME : U_UNICODE_CHAR_NAME;
157dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    UErrorCode status = U_ZERO_ERROR;
158dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    char buf[BUFSIZ]; // TODO: is there a more sensible upper bound?
159dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    int32_t byteCount = u_charName(codePoint, nameType, &buf[0], sizeof(buf), &status);
160dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak    return (U_FAILURE(status) || byteCount == 0) ? NULL : env->NewStringUTF(buf);
161dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
162dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
163dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniakstatic JNINativeMethod gMethods[] = {
164dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, digitImpl, "!(II)I"),
165dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, getDirectionalityImpl, "!(I)B"),
166dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, getNameImpl, "(I)Ljava/lang/String;"),
167dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, getNumericValueImpl, "!(I)I"),
168dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, getTypeImpl, "!(I)I"),
169dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isAlphabeticImpl, "!(I)Z"),
170dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isDefinedImpl, "!(I)Z"),
171dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isDigitImpl, "!(I)Z"),
172dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isIdentifierIgnorableImpl, "!(I)Z"),
173dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isIdeographicImpl, "!(I)Z"),
174dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isLetterImpl, "!(I)Z"),
175dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isLetterOrDigitImpl, "!(I)Z"),
176dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isLowerCaseImpl, "!(I)Z"),
177dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isMirroredImpl, "!(I)Z"),
178dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isSpaceCharImpl, "!(I)Z"),
179dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isTitleCaseImpl, "!(I)Z"),
180dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isUnicodeIdentifierPartImpl, "!(I)Z"),
181dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isUnicodeIdentifierStartImpl, "!(I)Z"),
182dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isUpperCaseImpl, "!(I)Z"),
183dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, isWhitespaceImpl, "!(I)Z"),
184dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, toLowerCaseImpl, "!(I)I"),
185dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, toTitleCaseImpl, "!(I)I"),
186dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  NATIVE_METHOD(Character, toUpperCaseImpl, "!(I)I"),
187dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak};
188dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak
189dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniakvoid register_java_lang_Character(JNIEnv* env) {
190dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak  jniRegisterNativeMethods(env, "java/lang/Character", gMethods, NELEM(gMethods));
191dcdf8113bed8181e2210b1379615cf772ce9b7faPrzemyslaw Szczepaniak}
192