1
1
#include < string>
2
- #include " rime_jni.h"
3
- #include " jni-common.h"
2
+ #include < rime_api.h>
3
+ #include " jni-utils.h"
4
+ #include " objconv.h"
5
+
6
+ #define MAX_BUFFER_LENGTH 2048
4
7
5
8
extern void rime_require_module_lua ();
6
9
extern void rime_require_module_charcode ();
@@ -154,8 +157,6 @@ JNI_OnLoad(JavaVM* jvm, void* reserved)
154
157
return JNI_VERSION_1_6;
155
158
}
156
159
157
- static jobject rimeConfigValueToJObject (JNIEnv *env, RimeConfig* config, const std::string &key);
158
-
159
160
extern " C"
160
161
JNIEXPORT void JNICALL
161
162
Java_com_osfans_trime_core_Rime_startupRime (JNIEnv *env, jclass clazz, jstring shared_dir, jstring user_dir,
@@ -219,10 +220,6 @@ Java_com_osfans_trime_core_Rime_clearRimeComposition(JNIEnv *env, jclass /* thiz
219
220
Rime::Instance ().clearComposition ();
220
221
}
221
222
222
- void rimeCommitToJObject (JNIEnv *env, const RimeCommit &commit, const jobject &jcommit) {
223
- env->SetObjectField (jcommit, GlobalRef->RimeCommitText , JString (env, commit.text ));
224
- }
225
-
226
223
// output
227
224
extern " C"
228
225
JNIEXPORT jboolean JNICALL
@@ -238,56 +235,6 @@ Java_com_osfans_trime_core_Rime_getRimeCommit(JNIEnv *env, jclass /* thiz */, jo
238
235
return false ;
239
236
}
240
237
241
- void rimeContextToJObject (JNIEnv *env, const RimeContext &context, const jobject &jcontext) {
242
- auto composition = JRef<>(env, env->AllocObject (GlobalRef->RimeComposition ));
243
- env->SetIntField (composition, GlobalRef->RimeCompositionLength , context.composition .length );
244
- env->SetIntField (composition, GlobalRef->RimeCompositionCursorPos ,
245
- context.composition .cursor_pos );
246
- env->SetIntField (composition, GlobalRef->RimeCompositionSelStart ,
247
- context.composition .sel_start );
248
- env->SetIntField (composition, GlobalRef->RimeCompositionSelEnd ,
249
- context.composition .sel_end );
250
- env->SetObjectField (composition, GlobalRef->RimeCompositionPreedit ,
251
- JString (env, context.composition .preedit ));
252
- env->SetObjectField (jcontext, GlobalRef->RimeContextComposition , composition);
253
-
254
- const auto &menu = context.menu ;
255
- auto jmenu = JRef<>(env, env->AllocObject (GlobalRef->RimeMenu ));
256
- env->SetIntField (jmenu, GlobalRef->RimeMenuPageSize , menu.page_size );
257
- env->SetIntField (jmenu, GlobalRef->RimeMenuPageNo , menu.page_no );
258
- env->SetBooleanField (jmenu, GlobalRef->RimeMenuIsLastPage , menu.is_last_page );
259
- env->SetIntField (jmenu, GlobalRef->RimeMenuHighlightedCandidateIndex ,
260
- menu.highlighted_candidate_index );
261
- env->SetIntField (jmenu, GlobalRef->RimeMenuNumCandidates , context.menu .num_candidates );
262
-
263
- size_t numSelectKeys = menu.select_keys ? std::strlen (menu.select_keys ) : 0 ;
264
- bool hasLabel = RIME_STRUCT_HAS_MEMBER (context, context.select_labels ) && context.select_labels ;
265
- auto selectLabels = JRef<jobjectArray>(env, env->NewObjectArray (menu.num_candidates , GlobalRef->String , nullptr ));
266
- auto candidates = JRef<jobjectArray>(env, env->NewObjectArray (menu.num_candidates , GlobalRef->CandidateListItem , nullptr ));
267
- for (int i = 0 ; i < menu.num_candidates ; ++i) {
268
- std::string label;
269
- if (i < menu.page_size && hasLabel) {
270
- label = context.select_labels [i];
271
- } else if (i < numSelectKeys) {
272
- label = std::string (1 , menu.select_keys [i]);
273
- } else {
274
- label = std::to_string ((i + 1 ) % 10 );
275
- }
276
- label.append (" " );
277
- env->SetObjectArrayElement (selectLabels, i, JString (env, label));
278
- auto &candidate = context.menu .candidates [i];
279
- auto jcandidate = JRef<>(env, env->NewObject (GlobalRef->CandidateListItem , GlobalRef->CandidateListItemInit ,
280
- *JString (env, candidate.comment ? candidate.comment : " " ),
281
- *JString (env, candidate.text ? candidate.text : " " )));
282
- env->SetObjectArrayElement (candidates, i, jcandidate);
283
- }
284
- env->SetObjectField (jmenu, GlobalRef->RimeMenuCandidates , candidates);
285
-
286
- env->SetObjectField (jcontext, GlobalRef->RimeContextMenu , jmenu);
287
- env->SetObjectField (jcontext, GlobalRef->RimeContextCommitTextPreview , JString (env, context.commit_text_preview ));
288
- env->SetObjectField (jcontext, GlobalRef->RimeContextSelectLabels , selectLabels);
289
- }
290
-
291
238
extern " C"
292
239
JNIEXPORT jboolean JNICALL
293
240
Java_com_osfans_trime_core_Rime_getRimeContext (JNIEnv *env, jclass /* thiz */ , jobject jcontext) {
@@ -302,18 +249,6 @@ Java_com_osfans_trime_core_Rime_getRimeContext(JNIEnv *env, jclass /* thiz */, j
302
249
return false ;
303
250
}
304
251
305
- void rimeStatusToJObject (JNIEnv *env, const RimeStatus &status, const jobject &jstatus) {
306
- env->SetObjectField (jstatus, GlobalRef->RimeStatusSchemaId , JString (env, status.schema_id ));
307
- env->SetObjectField (jstatus, GlobalRef->RimeStatusSchemaName , JString (env, status.schema_name ));
308
- env->SetBooleanField (jstatus, GlobalRef->RimeStatusDisable , status.is_disabled );
309
- env->SetBooleanField (jstatus, GlobalRef->RimeStatusComposing , status.is_composing );
310
- env->SetBooleanField (jstatus, GlobalRef->RimeStatusAsciiMode , status.is_ascii_mode );
311
- env->SetBooleanField (jstatus, GlobalRef->RimeStatusFullShape , status.is_full_shape );
312
- env->SetBooleanField (jstatus, GlobalRef->RimeStatusSimplified , status.is_simplified );
313
- env->SetBooleanField (jstatus, GlobalRef->RimeStatusTraditional , status.is_traditional );
314
- env->SetBooleanField (jstatus, GlobalRef->RimeStatusAsciiPunct , status.is_ascii_punct );
315
- }
316
-
317
252
extern " C"
318
253
JNIEXPORT jboolean JNICALL
319
254
Java_com_osfans_trime_core_Rime_getRimeStatus (JNIEnv *env, jclass /* thiz */ , jobject jstatus) {
@@ -377,19 +312,6 @@ Java_com_osfans_trime_core_Rime_getRimeOption(JNIEnv *env, jclass /* thiz */, js
377
312
return Rime::Instance ().getOption (CString (env, option));
378
313
}
379
314
380
- jobjectArray rimeSchemaListToJObjectArray (JNIEnv *env, RimeSchemaList &list) {
381
- jobjectArray array = env->NewObjectArray (static_cast <int >(list.size ), GlobalRef->SchemaListItem ,
382
- nullptr );
383
- for (int i = 0 ; i < list.size ; i++) {
384
- auto item = list.list [i];
385
- auto obj = JRef<>(env, env->NewObject (GlobalRef->SchemaListItem , GlobalRef->SchemaListItemInit ,
386
- *JString (env, item.schema_id ),
387
- *JString (env, item.name )));
388
- env->SetObjectArrayElement (array, i, obj);
389
- }
390
- return array;
391
- }
392
-
393
315
extern " C"
394
316
JNIEXPORT jobjectArray JNICALL
395
317
Java_com_osfans_trime_core_Rime_getRimeSchemaList (JNIEnv *env, jclass /* thiz */ ) {
@@ -472,34 +394,6 @@ Java_com_osfans_trime_core_Rime_getLibrimeVersion(JNIEnv *env, jclass /* thiz */
472
394
return env->NewStringUTF (LIBRIME_VERSION);
473
395
}
474
396
475
- static jobject rimeConfigListToJObject (JNIEnv *env, RimeConfig* config, const std::string &key) {
476
- auto rime = rime_get_api ();
477
- RimeConfigIterator iter = {nullptr };
478
- if (!rime->config_begin_list (&iter, config, key.c_str ())) return nullptr ;
479
- auto size = rime->config_list_size (config, key.c_str ());
480
- auto obj = env->NewObject (GlobalRef->ArrayList , GlobalRef->ArrayListInit , size);
481
- int i = 0 ;
482
- while (RimeConfigNext (&iter)) {
483
- auto e = JRef<>(env, rimeConfigValueToJObject (env, config, iter.path ));
484
- env->CallVoidMethod (obj, GlobalRef->ArrayListAdd , i++, *e);
485
- }
486
- rime->config_end (&iter);
487
- return obj;
488
- }
489
-
490
- static jobject rimeConfigMapToJObject (JNIEnv *env, RimeConfig *config, const std::string &key) {
491
- auto rime = rime_get_api ();
492
- RimeConfigIterator iter = {nullptr };
493
- if (!rime->config_begin_map (&iter, config, key.c_str ())) return nullptr ;
494
- auto obj = env->NewObject (GlobalRef->HashMap , GlobalRef->HashMapInit );
495
- while (rime->config_next (&iter)) {
496
- auto v = JRef<>(env, rimeConfigValueToJObject (env, config, iter.path ));
497
- env->CallObjectMethod (obj, GlobalRef->HashMapPut , *JString (env, iter.key ), *v);
498
- }
499
- rime->config_end (&iter);
500
- return obj;
501
- }
502
-
503
397
extern " C"
504
398
JNIEXPORT jobject JNICALL
505
399
Java_com_osfans_trime_core_Rime_getRimeConfigMap (JNIEnv *env, jclass clazz, jstring config_id, jstring key) {
@@ -513,20 +407,6 @@ Java_com_osfans_trime_core_Rime_getRimeConfigMap(JNIEnv *env, jclass clazz, jstr
513
407
return value;
514
408
}
515
409
516
- jobject rimeConfigValueToJObject (JNIEnv *env, RimeConfig *config, const std::string &key) {
517
- auto rime = rime_get_api ();
518
-
519
- const char *value;
520
- if ((value = rime->config_get_cstring (config, key.c_str ()))) {
521
- return env->NewStringUTF (value);
522
- }
523
- jobject list;
524
- if ((list = rimeConfigListToJObject (env, config, key))) {
525
- return list;
526
- }
527
- return rimeConfigMapToJObject (env, config, key);
528
- }
529
-
530
410
extern " C"
531
411
JNIEXPORT jboolean JNICALL
532
412
Java_com_osfans_trime_core_Rime_runRimeTask (JNIEnv *env, jclass /* thiz */ , jstring task_name) {
0 commit comments