示例#1
0
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;
	}
}
示例#2
0
CMorphInfo JNIToMorphInfo(JNIEnv *env, jobject morphInfo){
	CMorphInfo MorphInfo;
	MorphInfo.m_szRoot = FSJNIStrtoW(env, FSJNIGetStringField(env, morphInfo, "root"));
	MorphInfo.m_szEnding = FSJNIStrtoW(env, FSJNIGetStringField(env, morphInfo, "ending"));
	MorphInfo.m_szClitic = FSJNIStrtoW(env, FSJNIGetStringField(env, morphInfo, "clitic"));
	MorphInfo.m_cPOS = FSJNIGetCharField(env, morphInfo, "pos");
	MorphInfo.m_szForm = FSJNIStrtoW(env, FSJNIGetStringField(env, morphInfo, "form"));

	return MorphInfo;
}
示例#3
0
CMorphInfos JNIToMorphInfos(JNIEnv *env, jobject morphInfos){
	CMorphInfos MorphInfos;
	MorphInfos.m_szWord = FSJNIStrtoW(env, FSJNIGetStringField(env, morphInfos, "word"));

	jobjectArray morphInfo = (jobjectArray)FSJNIGetObjectField(env, morphInfos, "morphInfo", "[Lee/filosoft/vabamorf/MorphInfo;");
	INTPTR ipSize = env->GetArrayLength(morphInfo);
	for (INTPTR ip=0; ip<ipSize; ip++) {
		MorphInfos.m_MorphInfo.AddItem(JNIToMorphInfo(env, env->GetObjectArrayElement(morphInfo, ip)));
	}

	return MorphInfos;
}