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