android_text_Hyphenator.cpp revision 44a1df2cf3857692ca95149d4fa70017982f2211
130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright (C) 2017 The Android Open Source Project 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License. 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * http://www.apache.org/licenses/LICENSE-2.0 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License. 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */ 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <cstdint> 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <core_jni_helpers.h> 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <minikin/Hyphenator.h> 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <nativehelper/ScopedUtfChars.h> 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace android { 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstatic jlong nBuildHyphenator(JNIEnv* env, jclass, jlong dataAddress, jstring lang, 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun jint minPrefix, jint minSuffix) { 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const uint8_t* bytebuf = reinterpret_cast<const uint8_t*>(dataAddress); // null allowed. 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ScopedUtfChars language(env, lang); 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun minikin::Hyphenator* hyphenator = minikin::Hyphenator::loadBinary( 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bytebuf, minPrefix, minSuffix, language.c_str(), language.size()); 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return reinterpret_cast<jlong>(hyphenator); 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstatic const JNINativeMethod gMethods[] = { 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun {"nBuildHyphenator", "(JLjava/lang/String;II)J", (void*) nBuildHyphenator}, 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunint register_android_text_Hyphenator(JNIEnv* env) { 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return RegisterMethodsOrDie(env, "android/text/Hyphenator", gMethods, NELEM(gMethods)); 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace android 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun