JNIEXPORT jobjectArray JNICALL Java_ee_filosoft_vabamorf_Linguistic_synthesize(JNIEnv *env, jobject jobj, jobject info, jstring hint) { FUNCTION_HEADER; if (!linguistic) return NULL; try { jclass MorphInfoClass = env->FindClass("ee/filosoft/vabamorf/Linguistic$MorphInfo"); jmethodID MorphInfoClassConstructor = (MorphInfoClass ? env->GetMethodID(MorphInfoClass, "<init>", "()V") : 0); if (!MorphInfoClassConstructor) return NULL; CMorphInfo morphInfo; morphInfo.m_szRoot = FSJNIStrtoW(env, FSJNIGetStringField(env, info, "root")); morphInfo.m_szClitic = FSJNIStrtoW(env, FSJNIGetStringField(env, info, "clitic")); morphInfo.m_cPOS = FSJNIGetCharField(env, info, "pos"); morphInfo.m_szForm = FSJNIStrtoW(env, FSJNIGetStringField(env, info, "form")); CFSArray<CMorphInfo> results = linguistic->Synthesize(morphInfo, FSJNIStrtoW(env, hint)); jobjectArray synths=(jobjectArray)env->NewObjectArray(results.GetSize(), env->FindClass("java/lang/Object"), 0); for (INTPTR ip=0; ip<results.GetSize(); ip++) { jobject analyze1=env->NewObject(MorphInfoClass, MorphInfoClassConstructor); FSJNISetStringField(env, analyze1, "root", FSJNIWtoStr(env, results[ip].m_szRoot)); FSJNISetStringField(env, analyze1, "ending", FSJNIWtoStr(env, results[ip].m_szEnding)); FSJNISetStringField(env, analyze1, "clitic", FSJNIWtoStr(env, results[ip].m_szClitic)); FSJNISetCharField(env, analyze1, "pos", results[ip].m_cPOS); FSJNISetStringField(env, analyze1, "form", FSJNIWtoStr(env, results[ip].m_szForm)); env->SetObjectArrayElement(synths, ip, analyze1); } return synths; } catch(...) { return NULL; } }
jobject MorphInfoToJNI(JNIEnv *env, const CMorphInfo &MorphInfo) { jclass MorphInfoClass = env->FindClass("ee/filosoft/vabamorf/MorphInfo"); jmethodID MorphInfoClassConstructor = (MorphInfoClass ? env->GetMethodID(MorphInfoClass, "<init>", "()V") : 0); if (!MorphInfoClassConstructor) throw CFSException(); jobject morphInfo = env->NewObject(MorphInfoClass, MorphInfoClassConstructor); FSJNISetStringField(env, morphInfo, "root", FSJNIWtoStr(env, MorphInfo.m_szRoot)); FSJNISetStringField(env, morphInfo, "ending", FSJNIWtoStr(env, MorphInfo.m_szEnding)); FSJNISetStringField(env, morphInfo, "clitic", FSJNIWtoStr(env, MorphInfo.m_szClitic)); FSJNISetCharField(env, morphInfo, "pos", MorphInfo.m_cPOS); FSJNISetStringField(env, morphInfo, "form", FSJNIWtoStr(env, MorphInfo.m_szForm)); return morphInfo; }
JNIEXPORT jobjectArray JNICALL Java_ee_filosoft_vabamorf_Linguistic_suggest(JNIEnv *env, jobject jobj, jstring word, jboolean startSentence) { FUNCTION_HEADER; if (!linguistic) return NULL; try { CFSWStringArray suggestions = linguistic->Suggest(FSJNIStrtoW(env, word), startSentence!=JNI_FALSE); jobjectArray suggs = (jobjectArray)env->NewObjectArray(suggestions.GetSize(), env->FindClass("java/lang/String"), 0); for (INTPTR ip=0; ip<suggestions.GetSize(); ip++) { env->SetObjectArrayElement(suggs, ip, FSJNIWtoStr(env, suggestions[ip])); } return suggs; } catch(...) { return 0; } }
jobject MorphInfosToJNI(JNIEnv *env, const CMorphInfos &MorphInfos) { jclass MorphInfosClass = env->FindClass("ee/filosoft/vabamorf/MorphInfos"); jmethodID MorphInfosClassConstructor = (MorphInfosClass ? env->GetMethodID(MorphInfosClass, "<init>", "()V") : 0); if (!MorphInfosClassConstructor) throw CFSException(); jobject morphInfos = env->NewObject(MorphInfosClass, MorphInfosClassConstructor); FSJNISetStringField(env, morphInfos, "word", FSJNIWtoStr(env, MorphInfos.m_szWord)); jobjectArray morphInfo = (jobjectArray)env->NewObjectArray(MorphInfos.m_MorphInfo.GetSize(), env->FindClass("java/lang/Object"), 0); for (INTPTR ip2 = 0; ip2 < MorphInfos.m_MorphInfo.GetSize(); ip2++) { env->SetObjectArrayElement(morphInfo, ip2, MorphInfoToJNI(env, MorphInfos.m_MorphInfo[ip2])); } FSJNISetObjectField(env, morphInfos, "morphInfo", "[Lee/filosoft/vabamorf/MorphInfo;", morphInfo); return morphInfos; }