1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 2053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd. 3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License. 6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at 7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and 14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License. 15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni.h" 17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_lib.h" 19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_err.h" 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_ext.h" 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_dic.h" 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include <stdlib.h> 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include <string.h> 26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include <dlfcn.h> 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "OpenWnnJni.h" 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "predef_table.h" 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * functions for internal use 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic void clearDictionaryStructure( NJ_DIC_INFO* dicInfo ) { 37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dicInfo->type = 0; 38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dicInfo->handle = NULL; 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* dicInfo->srhCache = NULL; */ 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dicInfo->dic_freq[ NJ_MODE_TYPE_HENKAN ].base = 0; 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dicInfo->dic_freq[ NJ_MODE_TYPE_HENKAN ].high = 0; 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_CHAR convertUTFCharToNjChar( NJ_UINT8* src ) 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR ret; 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8* dst; 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* convert UTF-16BE character to NJ_CHAR format */ 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst = ( NJ_UINT8* )&ret; 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ 0 ] = src[ 0 ]; 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ 1 ] = src[ 1 ]; 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic int convertStringToNjChar( JNIEnv *env, NJ_CHAR* dst, jstring srcJ, int maxChars ) 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project const unsigned char* src; 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project src = ( const unsigned char* )( ( *env )->GetStringUTFChars( env, srcJ, NULL ) ); 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( src != NULL ) { 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i, o; 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* convert UTF-8 to UTF-16BE */ 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = o = 0 ; src[ i ] != 0x00 && o < maxChars ; ) { 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8* dst_tmp; 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp = ( NJ_UINT8* )&( dst[ o ] ); 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( ( src[ i ] & 0x80 ) == 0x00 ) { 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+0000 ... U+007f */ 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 8[0xxxxxxx] -> 16BE[00000000 0xxxxxxx] */ 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 0 ] = 0x00; 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 1 ] = src[ i + 0 ] & 0x7f; 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i++; 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o++; 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if( ( src[ i ] & 0xe0 ) == 0xc0 ) { 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+0080 ... U+07ff */ 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 8[110xxxxx 10yyyyyy] -> 16BE[00000xxx xxyyyyyy] */ 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( src[ i + 1 ] == 0x00 ) { 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 0 ] = ( ( src[ i + 0 ] & 0x1f ) >> 2 ); 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 1 ] = ( ( src[ i + 0 ] & 0x1f ) << 6 ) | ( src[ i + 1 ] & 0x3f ); 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i += 2; 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o++; 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if( ( src[ i ] & 0xf0 ) == 0xe0 ) { 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+0800 ... U+ffff */ 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 8[1110xxxx 10yyyyyy 10zzzzzz] -> 16BE[xxxxyyyy yyzzzzzz] */ 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( src[ i + 1 ] == 0x00 || src[ i + 2 ] == 0x00 ) { 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 0 ] = ( ( src[ i + 0 ] & 0x0f ) << 4 ) | ( ( src[ i + 1 ] & 0x3f ) >> 2 ); 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 1 ] = ( ( src[ i + 1 ] & 0x3f ) << 6 ) | ( src[ i + 2 ] & 0x3f ); 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i += 3; 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o++; 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if( ( src[ i ] & 0xf8 ) == 0xf0 ) { 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 dst1, dst2, dst3; 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+10000 ... U+10ffff */ 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 8[11110www 10xxxxxx 10yyyyyy 10zzzzzz] -> 32BE[00000000 000wwwxx xxxxyyyy yyzzzzzz] */ 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* -> 16BE[110110WW XXxxxxyy 110111yy yyzzzzzz] */ 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* -- --====== == -------- */ 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* dst1 dst2 dst3 */ 105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* "wwwxx"(00001-10000) - 1 = "WWXX"(0000-1111) */ 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( !( o < maxChars - 1 ) ) { 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* output buffer is full */ 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( src[ i + 1 ] == 0x00 || src[ i + 2 ] == 0x00 || src[ i + 3 ] == 0x00 ) { 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst1 = ( ( ( src[ i + 0 ] & 0x07 ) << 2 ) | ( ( src[ i + 1 ] & 0x3f ) >> 4 ) ) - 1; 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst2 = ( ( src[ i + 1 ] & 0x3f ) << 4 ) | ( ( src[ i + 2 ] & 0x3f ) >> 2 ); 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst3 = ( ( src[ i + 2 ] & 0x3f ) << 6 ) | ( src[ i + 3 ] & 0x3f ); 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 0 ] = 0xd8 | ( ( dst1 & 0x0c ) >> 2 ); 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 1 ] = ( ( dst1 & 0x03 ) << 6 ) | ( ( dst2 & 0xfc ) >> 2 ); 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 2 ] = 0xdc | ( ( dst2 & 0x03 ) ); 120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst_tmp[ 3 ] = dst3; 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i += 4; 122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o += 2; 123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { /* Broken code */ 124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o ] = NJ_CHAR_NUL; 128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->ReleaseStringUTFChars( env, srcJ, ( const char* )src ); 130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If retrieveing the string failed, return an error code */ 133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_CONVERT_STR_TO_NJC, NJ_ERR_JNI_FUNC_FAILED); 134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic int convertNjCharToString( JNIEnv* env, jstring* dstJ, NJ_CHAR* src, int maxChars ) 137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project char dst[ (NJ_MAX_LEN + NJ_MAX_RESULT_LEN + NJ_TERM_LEN ) * 3 + 1 ]; 139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i, o; 141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* convert UTF-16BE to a UTF-8 */ 143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = o = 0 ; src[ i ] != 0x0000 && i < maxChars ; ) { 144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8* src_tmp; 145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project src_tmp = ( NJ_UINT8* )&( src[ i ] ); 146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( src_tmp[ 0 ] == 0x00 && src_tmp[ 1 ] <= 0x7f ) { 148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+0000 ... U+007f */ 149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 16BE[00000000 0xxxxxxx] -> 8[0xxxxxxx] */ 150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 0 ] = src_tmp[ 1 ] & 0x007f; 151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i++; 152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o++; 153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if ( src_tmp[ 0 ] <= 0x07 ) { 154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+0080 ... U+07ff */ 155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 16BE[00000xxx xxyyyyyy] -> 8[110xxxxx 10yyyyyy] */ 156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 0 ] = 0xc0 | ( ( src_tmp[ 0 ] & 0x07 ) << 2 ) | ( ( src_tmp[ 1 ] & 0xc0 ) >> 6 ); 157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 1 ] = 0x80 | ( ( src_tmp[ 1 ] & 0x3f ) ); 158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i++; 159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o += 2; 160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if ( src_tmp[ 0 ] >= 0xd8 && src_tmp[ 0 ] <= 0xdb ) { 161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 src1, src2, src3; 162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+10000 ... U+10ffff (surrogate pair) */ 163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 32BE[00000000 000wwwxx xxxxyyyy yyzzzzzz] -> 8[11110www 10xxxxxx 10yyyyyy 10zzzzzz] */ 164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 16BE[110110WW XXxxxxyy 110111yy yyzzzzzz] */ 165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* -- --====== == -------- */ 166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* src1 src2 src3 */ 167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* "WWXX"(0000-1111) + 1 = "wwwxx"(0001-10000) */ 168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( !( i < maxChars - 1 ) || src_tmp[ 2 ] < 0xdc || src_tmp[ 2 ] > 0xdf ) { 169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* That is broken code */ 170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project src1 = ( ( ( src_tmp[ 0 ] & 0x03 ) << 2 ) | ( ( src_tmp[ 1 ] & 0xc0 ) >> 6 ) ) + 1; 173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project src2 = ( ( src_tmp[ 1 ] & 0x3f ) << 2 ) | ( ( src_tmp[ 2 ] & 0x03 ) ); 174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project src3 = src_tmp[ 3 ]; 175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 0 ] = 0xf0 | ( ( src1 & 0x1c ) >> 2 ); 177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 1 ] = 0x80 | ( ( src1 & 0x03 ) << 4 ) | ( ( src2 & 0xf0 ) >> 4 ); 178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 2 ] = 0x80 | ( ( src2 & 0x0f ) << 2 ) | ( ( src3 & 0xc0 ) >> 6 ); 179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 3 ] = 0x80 | ( src3 & 0x3f ); 180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i += 2; 181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o += 4; 182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* U+0800 ... U+ffff (except range of surrogate pair) */ 184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 16BE[xxxxyyyy yyzzzzzz] -> 8[1110xxxx 10yyyyyy 10zzzzzz] */ 185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 0 ] = 0xe0 | ( ( src_tmp[ 0 ] & 0xf0 ) >> 4 ); 186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 1 ] = 0x80 | ( ( src_tmp[ 0 ] & 0x0f ) << 2 ) | ( ( src_tmp[ 1 ] & 0xc0 ) >> 6 ); 187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o + 2 ] = 0x80 | ( ( src_tmp[ 1 ] & 0x3f ) ); 188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i++; 189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project o += 3; 190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ o ] = 0x00; 193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *dstJ = ( *env )->NewStringUTF( env, dst ); 195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If NewString() failed, return an error code */ 197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ( *dstJ == NULL ) ? NJ_SET_ERR_VAL(NJ_FUNC_JNI_CONVERT_NJC_TO_STR, NJ_ERR_JNI_FUNC_FAILED) : 0; 198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: createWnnWork 203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (Ljava/lang/String;)J 204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jlong JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_createWnnWork 206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jstring dicLibPathJ) 207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Allocating the internal work area */ 211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = ( NJ_JNIWORK* )malloc( sizeof( NJ_JNIWORK ) ); 212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32* dic_size; 214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8* dic_type; 215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8** dic_data; 216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8** con_data; 217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project const char* dicLibPath; 218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 result; 219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i; 220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Initialize the work area */ 222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memset( work, 0x00, sizeof( NJ_JNIWORK ) ); 223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Load the dictionary library which is specified by dicLibPathJ */ 225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( dicLibPathJ == NULL || 226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( dicLibPath = ( *env )->GetStringUTFChars( env, dicLibPathJ, 0 ) ) == NULL ) { 227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project free( work ); 228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicLibHandle = ( void* )dlopen( dicLibPath, RTLD_LAZY ); 232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->ReleaseStringUTFChars( env, dicLibPathJ, dicLibPath ); 233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->dicLibHandle == NULL ) { 235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project free( work ); 236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Retrieve data pointers of dictionary from the dictionary library, and put to internal work area */ 240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_size = ( NJ_UINT32* )dlsym( work->dicLibHandle, "dic_size" ); 241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_type = ( NJ_UINT8* )dlsym( work->dicLibHandle, "dic_type" ); 242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_data = ( NJ_UINT8** )dlsym( work->dicLibHandle, "dic_data" ); 243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( dic_size == NULL || dic_type == NULL || dic_data == NULL ) { 244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dlclose( work->dicLibHandle ); 245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project free( work ); 246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = 0 ; i < NJ_MAX_DIC ; i++ ) { 250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicHandle[ i ] = dic_data[ i ]; 251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicSize[ i ] = dic_size[ i ]; 252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicType[ i ] = dic_type[ i ]; 253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Set the rule dictionary if the rule data exist */ 256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project con_data = ( NJ_UINT8** )dlsym( work->dicLibHandle, "con_data" ); 257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( con_data != NULL ) { 258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ] = con_data[ 0 ]; 259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Execute the initialize method to initialize the internal work area */ 262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result = njx_init( &( work->wnnClass ) ); 263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( result >= 0 ) { 265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jlong jresult; 266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( NJ_JNIWORK** )&jresult = work; 268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return jresult; 269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If allocating a byte array failed, free all resource, and return NULL */ 272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dlclose( work->dicLibHandle ); 273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project free( work ); 274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If allocating the internal work area failed, return NULL */ 276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: freeWnnWork 282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_freeWnnWork 285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork) 286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 291053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was not yet released, remove that */ 292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->dicLibHandle != NULL ) { 293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dlclose( work->dicLibHandle ); 294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicLibHandle = NULL; 295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project free( work ); 297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 298053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 299053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 300053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* freeWnnWork() is always successful even if the internal work area was already released */ 302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 306053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 307053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: clearDictionaryParameters 308053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 309053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 310053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_clearDictionaryParameters 311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork) 312053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int index; 318053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 319053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Clear all dictionary set information structure and reset search state */ 320053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( index = 0 ; index < NJ_MAX_DIC ; index++ ) { 321053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clearDictionaryStructure( &( work->dicSet.dic[ index ] ) ); 322053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag = NJ_JNI_FLAG_NONE; 324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Clear the cache information */ 326053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memset( work->dicSet.keyword, 0x00, sizeof( work->dicSet.keyword ) ); 327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_CLEAR_DICTIONARY_PARAMETERS, NJ_ERR_NOT_ALLOCATED); 333053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 334053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 335053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 336053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 337053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: setDictionaryParameter 338053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JIII)I 339053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 340053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_setDictionaryParameter 341053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork, jint index, jint base, jint high) 342053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 343053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 344053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 345053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( ( index < 0 || index > NJ_MAX_DIC-1 ) || 346053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( base < -1 || base > 1000 ) || 347053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( high < -1 || high > 1000 ) ) { 348053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 349053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_DICTIONARY_PARAMETERS, NJ_ERR_INVALID_PARAM); 350053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 351053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 352053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 353053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Create the dictionary set information structure */ 355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( base < 0 || high < 0 || base > high ) { 356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If -1 was specified to base or high, clear that dictionary information structure */ 357053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If base is larger than high, clear that dictionary information structure */ 358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clearDictionaryStructure( &( work->dicSet.dic[ index ] ) ); 359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Set the dictionary informatin structure */ 361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicSet.dic[ index ].type = work->dicType[ index ]; 362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicSet.dic[ index ].handle = work->dicHandle[ index ]; 363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicSet.dic[ index ].srhCache = &( work->srhCache[ index ] ); 364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicSet.dic[ index ].dic_freq[ NJ_MODE_TYPE_HENKAN ].base = base; 366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->dicSet.dic[ index ].dic_freq[ NJ_MODE_TYPE_HENKAN ].high = high; 367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Reset search state because the dicionary information was changed */ 370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag = NJ_JNI_FLAG_NONE; 371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_DICTIONARY_PARAMETERS, NJ_ERR_NOT_ALLOCATED); 377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 379053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 381053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: searchWord 382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JIILjava/lang/String;)I 383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_searchWord 385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork, jint operation, jint order, jstring keyString) 386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 388053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( !( operation == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_SEARCH_EXACT || 390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project operation == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_SEARCH_PREFIX || 391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project operation == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_SEARCH_LINK ) || 392053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project !( order == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_ORDER_BY_FREQUENCY || 393053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project order == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_ORDER_BY_KEY ) || 394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project keyString == NULL ) { 395053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SEARCH_WORD, NJ_ERR_INVALID_PARAM); 397053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 398053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 399053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 400053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 401053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( ( *env )->GetStringLength( env, keyString ) > NJ_MAX_LEN ) { 402053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If too long key string was specified, return "No result is found" */ 403053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag &= ~NJ_JNI_FLAG_ENABLE_CURSOR; 404053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag &= ~NJ_JNI_FLAG_ENABLE_RESULT; 405053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 406053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 407053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 408053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertStringToNjChar( env, work->keyString, keyString, NJ_MAX_LEN ) >= 0 ) { 409053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jint result; 410053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 411053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Set the structure for search */ 412053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memset( &( work->cursor ), 0x00, sizeof( NJ_CURSOR ) ); 413053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->cursor.cond.operation = operation; 414053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->cursor.cond.mode = order; 415053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->cursor.cond.ds = &( work->dicSet ); 416053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->cursor.cond.yomi = work->keyString; 417053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->cursor.cond.charset = &( work->approxSet ); 418053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 419d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa /* If the link search feature is specified, set the predict search information to structure */ 420d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa if( operation == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_SEARCH_LINK ) { 421053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->cursor.cond.yomi = work->previousStroke; 422053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->cursor.cond.kanji = work->previousCandidate; 423053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 424053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 425053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Search a specified word */ 426053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memcpy( &( work->wnnClass.dic_set ), &( work->dicSet ), sizeof( NJ_DIC_SET ) ); 427053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result = ( jint )njx_search_word( &( work->wnnClass ), &( work->cursor ) ); 428053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 429053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a result is found, enable getNextWord method */ 430053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( result == 1 ) { 431053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag |= NJ_JNI_FLAG_ENABLE_CURSOR; 432053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 433053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag &= ~NJ_JNI_FLAG_ENABLE_CURSOR; 434053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 435053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag &= ~NJ_JNI_FLAG_ENABLE_RESULT; 436053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 437053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return result; 438053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 439053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If converting the string failed, return an error code */ 440053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SEARCH_WORD, NJ_ERR_INTERNAL); 441053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 442053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 443053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 444053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SEARCH_WORD, NJ_ERR_NOT_ALLOCATED); 445053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 446053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 447053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 448053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 449053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getNextWord 450f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa * Signature: (JI)I 451053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 452053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getNextWord 453f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa (JNIEnv *env, jclass obj, jlong wnnWork, jint length) 454053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 455053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 456053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 457053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 458053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 459053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->flag & NJ_JNI_FLAG_ENABLE_CURSOR ) { 460053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jint result; 461053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 462f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa /* Get a specified word and search a next word */ 463f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa if( length <= 0 ) { 464f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa result = ( jint )njx_get_word( &( work->wnnClass ), &( work->cursor ), &( work->result ) ); 465f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa } else { 466f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa do { 467f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa result = ( jint )njx_get_word( &( work->wnnClass ), &( work->cursor ), &( work->result ) ); 468f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa if( length == ( NJ_GET_YLEN_FROM_STEM( &( work->result.word ) ) + NJ_GET_YLEN_FROM_FZK( &( work->result.word ) ) ) ) { 469f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa break; 470f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa } 471f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa } while( result > 0 ); 472f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa } 473053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 474053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a result is found, enable getStroke, getCandidate, getFrequency methods */ 475053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( result > 0 ) { 476053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag |= NJ_JNI_FLAG_ENABLE_RESULT; 477053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 478053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag &= ~NJ_JNI_FLAG_ENABLE_RESULT; 479053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 480053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return result; 481053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 482053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* When njx_search_word() was not yet called, return "No result is found" */ 483053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 484053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 485053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 486053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 487053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 488053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_WORD, NJ_ERR_NOT_ALLOCATED); 489053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 490053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 491053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 492053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 493053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getStroke 494053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)Ljava/lang/String; 495053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 496053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jstring JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getStroke 497053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork) 498053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 499053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 500053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 501053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 502053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 503053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jstring str; 504053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 505053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->flag & NJ_JNI_FLAG_ENABLE_RESULT ) { 506053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR stroke[ NJ_MAX_LEN + NJ_TERM_LEN ]; 507053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 508053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( njx_get_stroke( &( work->wnnClass ), &( work->result ), stroke, sizeof( NJ_CHAR ) * ( NJ_MAX_LEN + NJ_TERM_LEN ) ) >= 0 && 509053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project convertNjCharToString( env, &str, stroke, NJ_MAX_LEN ) >= 0 ) { 510053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return str; 511053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 512053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 513053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* When njx_get_word() was not yet called, return "No result is found" */ 514053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertNjCharToString( env, &str, ( NJ_CHAR* )"\x00\x00", NJ_MAX_LEN ) >= 0 ) { 515053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return str; 516053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 517053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 518053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 519053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 520053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error status */ 521053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 522053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 523053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 524053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 525053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 526053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getCandidate 527053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)Ljava/lang/String; 528053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 529053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jstring JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getCandidate 530053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork) 531053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 532053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 533053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 534053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 535053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 536053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jstring str; 537053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 538053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->flag & NJ_JNI_FLAG_ENABLE_RESULT ) { 539053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR candidate[ NJ_MAX_LEN + NJ_TERM_LEN ]; 540053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 541053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( njx_get_candidate( &( work->wnnClass ), &( work->result ), candidate, sizeof( NJ_CHAR ) * ( NJ_MAX_RESULT_LEN + NJ_TERM_LEN ) ) >= 0 && 542053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project convertNjCharToString( env, &str, candidate, NJ_MAX_RESULT_LEN ) >= 0 ) { 543053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return str; 544053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 545053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 546053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* When njx_get_word() was not yet called, return "No result is found" */ 547053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertNjCharToString( env, &str, ( NJ_CHAR* )"\x00\x00", NJ_MAX_RESULT_LEN ) >= 0 ) { 548053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return str; 549053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 550053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 551053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 552053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 553053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error status */ 554053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 555053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 556053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 557053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 558053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 559053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getFrequency 560053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 561053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 562053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getFrequency 563053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork) 564053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 565053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 566053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 567053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 568053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 569053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->flag & NJ_JNI_FLAG_ENABLE_RESULT ) { 570053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ( jint )( work->result.word.stem.hindo ); 571053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 572053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* When njx_get_word() was not yet called, return "No result is found" */ 573053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 574053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 575053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 576053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 577053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 578053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_FREQUENCY, NJ_ERR_NOT_ALLOCATED); 579053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 580053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 581053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 582053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 583053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: clearApproxPatterns 584053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)V 585053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 586053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT void JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_clearApproxPatterns 587053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork) 588053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 589053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 590053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 591053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 592053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 593053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i; 594053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 595053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Clear state */ 596053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag = NJ_JNI_FLAG_NONE; 597053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 598053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Clear approximate patterns */ 599053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.charset_count = 0; 600053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = 0 ; i < NJ_MAX_CHARSET ; i++ ) { 601053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.from[ i ] = NULL; 602053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.to[ i ] = NULL; 603053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 604053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 605053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Clear the cache information */ 606053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memset( work->dicSet.keyword, 0x00, sizeof( work->dicSet.keyword ) ); 607053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 608053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 609053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 610053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 611053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 612053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: setApproxPattern 613053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JLjava/lang/String;Ljava/lang/String;)I 614053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 615053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_setApproxPattern__JLjava_lang_String_2Ljava_lang_String_2 616053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jobject obj, jlong wnnWork, jstring srcJ, jstring dstJ) 617053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 618053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 619053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 620053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( srcJ == NULL || ( *env )->GetStringLength( env, srcJ ) == 0 || ( *env )->GetStringLength( env, srcJ ) > 1 || 621053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dstJ == NULL || ( *env )->GetStringLength( env, dstJ ) == 0 || ( *env )->GetStringLength( env, dstJ ) > 3 ) { 622053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 623053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_APPROX_PATTERN, NJ_ERR_INVALID_PARAM); 624053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 625053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 626053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 627053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 628053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->approxSet.charset_count < NJ_MAX_CHARSET ) { 629053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR* from; 630053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR* to; 631053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 632053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Set pointers of string to store approximate informations */ 633053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project from = work->approxStr + NJ_APPROXSTORE_SIZE * work->approxSet.charset_count; 634053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project to = work->approxStr + NJ_APPROXSTORE_SIZE * work->approxSet.charset_count + NJ_MAX_CHARSET_FROM_LEN + NJ_TERM_LEN; 635053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.from[ work->approxSet.charset_count ] = from; 636053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.to[ work->approxSet.charset_count ] = to; 637053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 638053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Convert approximate informations to internal format */ 639053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertStringToNjChar( env, from, srcJ, NJ_MAX_CHARSET_FROM_LEN ) >= 0 && 640053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project convertStringToNjChar( env, to, dstJ, NJ_MAX_CHARSET_TO_LEN ) >= 0 ) { 641053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.charset_count++; 642053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 643053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Reset search state because the seach condition was changed */ 644053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag = NJ_JNI_FLAG_NONE; 645053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 646053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 647053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 648053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 649053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If converting informations failed, reset pointers, and return an error code */ 650053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.from[ work->approxSet.charset_count ] = NULL; 651053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.to[ work->approxSet.charset_count ] = NULL; 652053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_APPROX_PATTERN, NJ_ERR_INTERNAL); 653053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 654053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the approx pattern registration area was full, return an error code */ 655053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_APPROX_PATTERN, NJ_ERR_APPROX_PATTERN_IS_FULL); 656053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 657053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 658053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 659053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_APPROX_PATTERN, NJ_ERR_NOT_ALLOCATED); 660053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 661053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 662053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 663053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 664053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: setApproxPattern 665053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JI)I 666053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 667053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_setApproxPattern__JI 668053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jint approxPattern) 669053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 670053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK *work; 671053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 672053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( !( approxPattern == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_APPROX_PATTERN_EN_TOUPPER || 673053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project approxPattern == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_APPROX_PATTERN_EN_TOLOWER || 674053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project approxPattern == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_APPROX_PATTERN_EN_QWERTY_NEAR || 675053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project approxPattern == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_APPROX_PATTERN_EN_QWERTY_NEAR_UPPER || 676053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project approxPattern == jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_APPROX_PATTERN_JAJP_12KEY_NORMAL ) ) { 677053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 678053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_APPROX_PATTERN, NJ_ERR_INVALID_PARAM); 679053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 680053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 681053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 682053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 683053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project const PREDEF_APPROX_PATTERN* pattern; 684053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 685053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project pattern = predefinedApproxPatterns[ approxPattern ]; 686053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->approxSet.charset_count + pattern->size <= NJ_MAX_CHARSET ) { 687053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i; 688053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 689053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = 0 ; i < pattern->size ; i++ ) { 690053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR* from; 691053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR* to; 692053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 693053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Set pointers of string to store approximate informations */ 694053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project from = work->approxStr + NJ_APPROXSTORE_SIZE * ( work->approxSet.charset_count + i ); 695053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project to = work->approxStr + NJ_APPROXSTORE_SIZE * ( work->approxSet.charset_count + i ) + NJ_MAX_CHARSET_FROM_LEN + NJ_TERM_LEN; 696053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.from[ work->approxSet.charset_count + i ] = from; 697053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.to[ work->approxSet.charset_count + i ] = to; 698053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 699053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Set approximate pattern */ 700053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project from[ 0 ] = convertUTFCharToNjChar( pattern->from + i * 2 ); /* "2" means the size of UTF-16BE */ 701053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project from[ 1 ] = 0x0000; 702053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 703053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project to[ 0 ] = convertUTFCharToNjChar( pattern->to + i * 2 ); /* "2" means the size of UTF-16BE */ 704053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project to[ 1 ] = 0x0000; 705053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 706053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->approxSet.charset_count += pattern->size; 707053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 708053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Reset search state because the seach condition was changed */ 709053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work->flag = NJ_JNI_FLAG_NONE; 710053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 711053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 712053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 713053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the approx pattern registration area was full, return an error code */ 714053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_APPROX_PATTERN, NJ_ERR_APPROX_PATTERN_IS_FULL); 715053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 716053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 717053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 718053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_APPROX_PATTERN, NJ_ERR_NOT_ALLOCATED); 719053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 720053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 721053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 722053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 723053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getLeftPartOfSpeech 724053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 725053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 726053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getLeftPartOfSpeech 727053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork) 728053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 729053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 730053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 731053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 732053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 733053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_GET_FPOS_FROM_STEM( &( work->result.word ) ); 734053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 735053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 736053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 737053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_LEFT_PART_OF_SPEECH, NJ_ERR_NOT_ALLOCATED); 738053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 739053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 740053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 741053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 742053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getRightPartOfSpeech 743053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 744053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 745053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getRightPartOfSpeech 746053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork) 747053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 748053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 749053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 750053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 751053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 752053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_GET_BPOS_FROM_STEM( &( work->result.word ) ); 753053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 754053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 755053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 756053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_RIGHT_PART_OF_SPEECH, NJ_ERR_NOT_ALLOCATED); 757053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 758053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 759053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 760053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 761053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: clearResult 762053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)V 763053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 764053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT void JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_clearResult 765053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork) 766053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 767053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 768053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 769053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 770053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 771053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Clear the current word information */ 772053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memset( &( work->result ), 0x00, sizeof( NJ_RESULT ) ); 773053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memset( &( work->previousStroke ), 0x00, sizeof( work->previousStroke ) ); 774053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memset( &( work->previousCandidate ), 0x00, sizeof( work->previousCandidate ) ); 775053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 776053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 777053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* In this method, No error reports. */ 778053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 779053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 780053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 781053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 782053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: setLeftPartOfSpeech 783053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JI)I 784053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 785053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_setLeftPartOfSpeech 786053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jint leftPartOfSpeech) 787053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 788053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 789053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 790053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 791053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 792053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 lcount = 0, rcount = 0; 793053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 794053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ] == NULL ) { 795053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No rule dictionary was set */ 796053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_LEFT_PART_OF_SPEECH, NJ_ERR_NO_RULEDIC); 797053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 798053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 799053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_count( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], &lcount, &rcount ); 800053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 801053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( leftPartOfSpeech < 1 || leftPartOfSpeech > lcount ) { 802053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 803053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_LEFT_PART_OF_SPEECH, NJ_ERR_INVALID_PARAM); 804053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 805053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 806053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_SET_FPOS_TO_STEM( &( work->result.word ), leftPartOfSpeech ); 807053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 808053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 809053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 810053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 811053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_LEFT_PART_OF_SPEECH, NJ_ERR_NOT_ALLOCATED); 812053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 813053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 814053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 815053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 816053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: setRightPartOfSpeech 817053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JI)I 818053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 819053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_setRightPartOfSpeech 820053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jint rightPartOfSpeech) 821053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 822053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 823053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 824053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 825053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 826053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 lcount = 0, rcount = 0; 827053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 828053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ] == NULL ) { 829053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No rule dictionary was set */ 830053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_RIGHT_PART_OF_SPEECH, NJ_ERR_NO_RULEDIC); 831053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 832053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 833053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_count( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], &lcount, &rcount ); 834053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 835053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( rightPartOfSpeech < 1 || rightPartOfSpeech > rcount ) { 836053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 837053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_RIGHT_PART_OF_SPEECH, NJ_ERR_INVALID_PARAM); 838053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 839053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 840053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_SET_BPOS_TO_STEM( &( work->result.word ), rightPartOfSpeech ); 841053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 842053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 843053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 844053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 845053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_RIGHT_PART_OF_SPEECH, NJ_ERR_NOT_ALLOCATED); 846053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 847053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 848053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 849053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 850053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: setStroke 851053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JLjava/lang/String;)I 852053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 853053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_setStroke 854053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jstring stroke) 855053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 856053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 857053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 858053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( stroke == NULL ) { 859053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 860053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_STROKE, NJ_ERR_INVALID_PARAM); 861053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 862053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 863053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 864053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 865053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( ( *env )->GetStringLength( env, stroke ) > NJ_MAX_LEN ) { 866053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 867053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_STROKE, NJ_ERR_YOMI_TOO_LONG); 868053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 869053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 870053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Store stroke string */ 871053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertStringToNjChar( env, work->previousStroke, stroke, NJ_MAX_LEN ) >= 0 ) { 872053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 873053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 874053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 875053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If converting the string failed, return an error code */ 876053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_STROKE, NJ_ERR_INTERNAL); 877053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 878053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 879053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 880053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_STROKE, NJ_ERR_NOT_ALLOCATED); 881053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 882053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 883053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 884053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 885053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: setCandidate 886053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JLjava/lang/String;)I 887053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 888053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_setCandidate 889053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jstring candidate) 890053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 891053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 892053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 893053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( candidate == NULL ) { 894053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 895053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_CANDIDATE, NJ_ERR_INVALID_PARAM); 896053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 897053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 898053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 899053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 900053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( ( *env )->GetStringLength( env, candidate ) > NJ_MAX_RESULT_LEN ) { 901053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 902053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_CANDIDATE, NJ_ERR_CANDIDATE_TOO_LONG); 903053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 904053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 905053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Store candidate string */ 906053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertStringToNjChar( env, work->previousCandidate, candidate, NJ_MAX_RESULT_LEN ) >= 0 ) { 907053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 908053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 909053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 910053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If converting the string failed, return an error code */ 911053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_CANDIDATE, NJ_ERR_INTERNAL); 912053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 913053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 914053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 915053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SET_CANDIDATE, NJ_ERR_NOT_ALLOCATED); 916053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 917053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 918053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 919053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 920053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: selectWord 921053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 922053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 923053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_selectWord 924053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork) 925053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 926053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 927053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 928053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 929053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 930053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Put the previous word information to engine */ 931053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project memcpy( &( work->wnnClass.dic_set ), &( work->dicSet ), sizeof( NJ_DIC_SET ) ); 932053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ( jint )njx_select( &( work->wnnClass ), &( work->result ) ); 933053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 934053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 935053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 936053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_SELECT_WORD, NJ_ERR_NOT_ALLOCATED); 937053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 938053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 939053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 940053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 941053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getLeftPartOfSpeechSpecifiedType 942053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JI)I 943053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 944053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getLeftPartOfSpeechSpecifiedType 945053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jint type) 946053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 947053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 948053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 949053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 950053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 951053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch( type ) { 952053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_V1: 953053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_V1_F; 954053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 955053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_V2: 956053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_V2_F; 957053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 958053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_V3: 959053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_V3_F; 960053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 961053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_BUNTOU: 962053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No part of speech is defined at this type */ 963053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 964053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_TANKANJI: 965053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_TANKANJI_F; 966053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 967053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_SUUJI: 968053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No part of speech is defined at this type */ 969053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 970053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_MEISI: 971053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_MEISI_F; 972053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 973053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_JINMEI: 974053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_JINMEI_F; 975053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 976053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_CHIMEI: 977053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_CHIMEI_F; 978053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 979053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_KIGOU: 980053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_KIGOU_F; 981053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 982053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 983053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 984053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_LEFT_PART_OF_SPEECH_SPECIFIED_TYPE, NJ_ERR_INVALID_PARAM); 985053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 986053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ( jint )njd_r_get_hinsi( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], type ); 987053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 988053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 989053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 990053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_LEFT_PART_OF_SPEECH_SPECIFIED_TYPE, NJ_ERR_NOT_ALLOCATED); 991053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 992053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 993053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 994053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 995053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getRightPartOfSpeechSpecifiedType 996053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JI)I 997053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 998053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getRightPartOfSpeechSpecifiedType 999053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jint type) 1000053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 1001053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 1002053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1003053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 1004053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 1005053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch( type ) { 1006053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_V1: 1007053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No part of speech is defined at this type */ 1008053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 1009053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_V2: 1010053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No part of speech is defined at this type */ 1011053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 1012053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_V3: 1013053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No part of speech is defined at this type */ 1014053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 1015053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_BUNTOU: 1016053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_BUNTOU_B; 1017053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 1018053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_TANKANJI: 1019053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_TANKANJI_B; 1020053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 1021053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_SUUJI: 1022053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_SUUJI_B; 1023053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 1024053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_MEISI: 1025053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_MEISI_B; 1026053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 1027053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_JINMEI: 1028053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_JINMEI_B; 1029053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 1030053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_CHIMEI: 1031053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_CHIMEI_B; 1032053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 1033053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_POS_TYPE_KIGOU: 1034053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_HINSI_KIGOU_B; 1035053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 1036053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 1037053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 1038053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_LEFT_PART_OF_SPEECH_SPECIFIED_TYPE, NJ_ERR_INVALID_PARAM); 1039053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1040053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ( jint )njd_r_get_hinsi( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], type ); 1041053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1042053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1043053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 1044053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_RIGHT_PART_OF_SPEECH_SPECIFIED_TYPE, NJ_ERR_NOT_ALLOCATED); 1045053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 1046053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1047053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 1048053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 1049053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getConnectArray 1050053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JI)[B 1051053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 1052053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jbyteArray JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getConnectArray 1053053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jint leftPartOfSpeech) 1054053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 1055053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 1056053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1057053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 1058053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 1059053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 lcount = 0, rcount = 0; 1060053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jbyteArray resultJ; 1061053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1062053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ] == NULL ) { 1063053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No rule dictionary was set */ 1064053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1065053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1066053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1067053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_count( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], &lcount, &rcount ); 1068053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1069053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( leftPartOfSpeech < 0 || leftPartOfSpeech > lcount ) { 1070053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Invalid POS is specified */ 1071053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1072053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1073053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1074053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* 1-origin */ 1075053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project resultJ = ( *env )->NewByteArray( env, rcount + 1 ); 1076053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1077053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( resultJ != NULL ) { 1078053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jbyte *result; 1079053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result = ( *env )->GetByteArrayElements( env, resultJ, NULL ); 1080053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1081053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( result != NULL ) { 1082053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i; 1083053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8* connect; 1084053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1085053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( leftPartOfSpeech == 0 ) { 1086053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = 0 ; i < rcount + 1 ; i++ ) { 1087053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result[ i ] = 0; 1088053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1089053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 1090053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Get the packed connect array */ 1091053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_connect( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], leftPartOfSpeech, NJ_RULE_TYPE_FTOB, &connect ); 1092053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1093053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* Extract connect array from bit field */ 1094053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result[ 0 ] = 0; 1095053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1096053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = 0 ; i < rcount ; i++ ) { 1097053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( connect[ i / 8 ] & (0x80 >> (i % 8))) { 1098053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result[ i + 1 ] = 1; 1099053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 1100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result[ i + 1 ] = 0; 1101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->ReleaseByteArrayElements( env, resultJ, result, 0 ); 1106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return resultJ; 1107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If allocating the return area failed, return an error code */ 1110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 1113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 1115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 1117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 1118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getNumberOfLeftPOS 1119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 1120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 1121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getNumberOfLeftPOS 1122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork) 1123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 1124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 1125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 1127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 1128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ] == NULL ) { 1129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No rule dictionary was set */ 1130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 1131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 1132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 lcount = 0, rcount = 0; 1133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_count( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], &lcount, &rcount ); 1135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return lcount; 1136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 1140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_NUMBER_OF_LEFT_POS, NJ_ERR_NOT_ALLOCATED); 1141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 1142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 1144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 1145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getNumberOfRightPOS 1146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (J)I 1147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 1148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jint JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getNumberOfRightPOS 1149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork) 1150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 1151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 1152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 1154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 1155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ] == NULL ) { 1156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* No rule dictionary was set */ 1157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 1158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 1159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 lcount = 0, rcount = 0; 1160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_count( work->dicSet.rHandle[ NJ_MODE_TYPE_HENKAN ], &lcount, &rcount ); 1162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return rcount; 1163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 1167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_JNI_GET_NUMBER_OF_RIGHT_POS, NJ_ERR_NOT_ALLOCATED); 1168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 1169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 1171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 1172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: getApproxPattern 1173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JLjava/lang/String;)[Ljava/lang/String; 1174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 1175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jobjectArray JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_getApproxPattern 1176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jstring srcJ) 1177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 1178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 1179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( srcJ == NULL || ( *env )->GetStringLength( env, srcJ ) == 0 || ( *env )->GetStringLength( env, srcJ ) > 1 ) { 1181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 1182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 1186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 1187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i, outIndex, outCount; 1188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR from[ NJ_MAX_CHARSET_FROM_LEN + NJ_TERM_LEN ]; 1189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertStringToNjChar( env, from, srcJ, NJ_MAX_CHARSET_FROM_LEN ) >= 0 ) { 1191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project outCount = 0; 1192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = 0 ; i < work->approxSet.charset_count ; i++ ) { 1193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( nj_strcmp( from, work->approxSet.from[ i ] ) == 0 ) { 1194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project outCount++; 1195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jclass strC = ( *env )->FindClass( env, "java/lang/String" ); 1199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( strC != NULL ) { 1201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jobjectArray retJ = ( *env )->NewObjectArray( env, outCount, strC, NULL ); 1202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( retJ != NULL ) { 1204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = outIndex = 0 ; i < work->approxSet.charset_count ; i++ ) { 1205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( nj_strcmp( from, work->approxSet.from[ i ] ) == 0 ) { 1206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jstring dstJ; 1207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertNjCharToString( env, &dstJ, work->approxSet.to[ i ], NJ_MAX_CHARSET_TO_LEN ) < 0 ) { 1209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->SetObjectArrayElement( env, retJ, outIndex++, dstJ ); 1213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return retJ; 1217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal error occured, return an error code */ 1221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 1225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 1227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 1229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 1230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: createBindArray 1231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JLjava/lang/String;II)[Ljava/lang/String; 1232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 1233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jobjectArray JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_createBindArray 1234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jstring keyStringJ, jint maxBindsOfQuery, jint maxPatternOfApprox) 1235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 1236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 1237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( keyStringJ == NULL ) { 1239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 1240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 1244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 1245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* create the string array for result */ 1246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jclass strC = ( *env )->FindClass( env, "java/lang/String" ); 1247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( strC != NULL ) { 1249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jobjectArray retJ = ( *env )->NewObjectArray( env, maxBindsOfQuery * (maxPatternOfApprox+1), strC, NULL ); 1250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( retJ != NULL ) { 1252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR keyString[ NJ_MAX_LEN + NJ_TERM_LEN ]; 1253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertStringToNjChar( env, keyString, keyStringJ, NJ_MAX_LEN ) >= 0 ) { 1255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int queryLen, outIndex, approxPattern; 1256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR baseStr[ NJ_MAX_LEN + NJ_MAX_CHARSET_TO_LEN + NJ_TERM_LEN ]; 1257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project outIndex = 0; 1259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project baseStr[ 0 ] = NJ_CHAR_NUL; 1260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( queryLen = 0 ; queryLen < maxBindsOfQuery && keyString[ queryLen ] != NJ_CHAR_NUL ; queryLen++ ) { 1262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int i; 1263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( i = -1, approxPattern = -1 ; i < work->approxSet.charset_count ; i++ ) { 1265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( i == -1 || keyString[ queryLen ] == work->approxSet.from[ i ][ 0 ] ) { 1266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int tailOffset = 0; 1267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( i == -1 ) { 1269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( *( ( NJ_UINT8* )( &keyString[ queryLen ] ) + 0 ) == 0x00 && 1270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *( ( NJ_UINT8* )( &keyString[ queryLen ] ) + 1 ) == 0x25 || /* '%' */ 1271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &keyString[ queryLen ] ) + 1 ) == 0x5c || /* '\' */ 1272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &keyString[ queryLen ] ) + 1 ) == 0x5f ) ) { /* '_' */ 1273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &baseStr[ queryLen + 0 ] ) + 0 ) = 0x00; 1274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &baseStr[ queryLen + 0 ] ) + 1 ) = 0x5c; /* '\' */ 1275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project baseStr[ queryLen + 1 ] = keyString[ queryLen ]; 1276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tailOffset = 2; 1277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 1278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project baseStr[ queryLen + 0 ] = keyString[ queryLen ]; 1279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tailOffset = 1; 1280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 1282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project nj_strcpy( &baseStr[ queryLen ], work->approxSet.to[ i ] ); 1283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tailOffset = nj_strlen( work->approxSet.to[ i ] ); 1284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &baseStr[ queryLen + tailOffset ] ) + 0 ) = 0x00; 1287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &baseStr[ queryLen + tailOffset ] ) + 1 ) = 0x25; /* '%' */ 1288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project baseStr[ queryLen + tailOffset + 1 ] = NJ_CHAR_NUL; 1289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jstring dstJ; 1291053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( convertNjCharToString( env, &dstJ, baseStr, NJ_MAX_LEN ) < 0 ) { 1292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->SetObjectArrayElement( env, retJ, outIndex++, dstJ ); 1296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project approxPattern++; 1297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1298053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1299053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( ; approxPattern < maxPatternOfApprox ; approxPattern++ ) { 1300053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jstring dstJ = ( *env )->NewStringUTF( env, "" ); 1301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( dstJ == NULL ) { 1302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->SetObjectArrayElement( env, retJ, outIndex++, dstJ ); 1305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1306053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1307053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &baseStr[ queryLen ] ) + 0 ) = 0x00; 1308053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *( ( NJ_UINT8* )( &baseStr[ queryLen ] ) + 1 ) = 0x5f; /* '_' */ 1309053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project baseStr[ queryLen + 1 ] = NJ_CHAR_NUL; 1310053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1312053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( ; queryLen < maxBindsOfQuery ; queryLen++ ) { 1313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( approxPattern = -1 ; approxPattern < maxPatternOfApprox ; approxPattern++ ) { 1314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jstring dstJ = ( *env )->NewStringUTF( env, "%" ); 1315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( dstJ == NULL ) { 1316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1318053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->SetObjectArrayElement( env, retJ, outIndex++, dstJ ); 1319053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1320053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1321053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1322053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return retJ; 1323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1326053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal error occured, return an error code */ 1327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If the internal work area was already released, return an error code */ 1331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 1333053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1334053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 1335053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Class: jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni 1336053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Method: createQueryStringBase 1337053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Signature: (JIILjava/lang/String;)Ljava/lang/String; 1338053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 1339053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectJNIEXPORT jstring JNICALL Java_jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni_createQueryStringBase 1340053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (JNIEnv *env, jclass obj, jlong wnnWork, jint maxBindsOfQuery, jint maxPatternOfApprox, jstring keyColumnNameJ) 1341053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 1342053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_JNIWORK* work; 1343053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project jstring retJ = NULL; 1344053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1345053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( keyColumnNameJ == NULL ) { 1346053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* If a invalid parameter was specified, return an error code */ 1347053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NULL; 1348053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1349053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1350053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project work = *( NJ_JNIWORK** )&wnnWork; 1351053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( work != NULL ) { 1352053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project const unsigned char* keyName = ( const unsigned char* )( ( *env )->GetStringUTFChars( env, keyColumnNameJ, NULL ) ); 1353053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( keyName != NULL ) { 1355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int keyLength = strlen( ( char* )keyName ); 1356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1357053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project char *dst = ( char* )malloc( maxBindsOfQuery * ( ( 1 + keyLength + 18 + 1 + 5 ) + 1358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( ( 4 + keyLength + 18 ) * maxPatternOfApprox ) + 1359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1 ) ); 1360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( dst != NULL ) { 1361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int queryLen, dstPtr; 1362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( queryLen = dstPtr = 0 ; queryLen < maxBindsOfQuery ; queryLen++ ) { 1364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int approxPattern; 1365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr ], "(" ); 1367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr + 1 ], ( char* )keyName ); 1368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr + 1 + keyLength ], " like ? escape '\x5c'" ); 1369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dstPtr += 1 + keyLength + 18; 1370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( approxPattern = 0 ; approxPattern < maxPatternOfApprox ; approxPattern++ ) { 1372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr ], " or " ); 1373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr + 4 ], ( char* )keyName ); 1374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr + 4 + keyLength ], " like ? escape '\x5c'" ); 1375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dstPtr += 4 + keyLength + 18; 1376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr ], ")" ); 1378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dstPtr++; 1379053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( queryLen != maxBindsOfQuery-1 ) { 1381053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project strcpy( &dst[ dstPtr ], " and " ); 1382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dstPtr += 5; 1383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dst[ dstPtr ] = '\0'; 1387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project retJ = ( *env )->NewStringUTF( env, dst ); 1388053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project free( dst ); 1390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1392053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ( *env )->ReleaseStringUTFChars( env, keyColumnNameJ, ( const char* )keyName ); 1393053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1395053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return retJ; 1396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 1397053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1398