Skip to content

Commit d280ee9

Browse files
committed
refactor(core,data,ime,jni,ui): move OpenCC APIs to OpenCCDictManager
1 parent 67b6374 commit d280ee9

File tree

7 files changed

+40
-47
lines changed

7 files changed

+40
-47
lines changed

app/src/main/java/com/osfans/trime/core/Rime.java

-15
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818

1919
package com.osfans.trime.core;
2020

21-
import android.text.TextUtils;
2221
import androidx.annotation.NonNull;
2322
import androidx.annotation.Nullable;
2423
import com.osfans.trime.data.AppPrefs;
25-
import com.osfans.trime.data.DataManager;
2624
import com.osfans.trime.data.opencc.OpenCCDictManager;
2725
import com.osfans.trime.ime.symbol.SimpleKeyBean;
2826
import java.io.BufferedReader;
@@ -617,14 +615,6 @@ public static void handleRimeNotification(
617615
isHandlingRimeNotification = false;
618616
}
619617

620-
public static String openccConvert(String line, String name) {
621-
if (!TextUtils.isEmpty(name)) {
622-
final File f = new File(DataManager.getDataDir("opencc"), name);
623-
if (f.exists()) return opencc_convert(line, f.getAbsolutePath());
624-
}
625-
return line;
626-
}
627-
628618
public static boolean syncUserData() {
629619
boolean b = syncRimeUserData();
630620
deployRime();
@@ -717,9 +707,4 @@ public static native Map<String, Object> getRimeConfigMap(
717707
public static native SchemaListItem[] getSelectedRimeSchemaList();
718708

719709
public static native boolean selectRimeSchemas(@NonNull String[] schemaIds);
720-
721-
// opencc
722-
public static native String get_opencc_version();
723-
724-
public static native String opencc_convert(String line, String name);
725710
}

app/src/main/java/com/osfans/trime/data/opencc/OpenCCDictManager.kt

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.osfans.trime.data.opencc
22

3+
import com.osfans.trime.core.Rime
34
import com.osfans.trime.data.DataManager
45
import com.osfans.trime.data.opencc.dict.Dictionary
56
import com.osfans.trime.data.opencc.dict.OpenCCDictionary
@@ -68,7 +69,26 @@ object OpenCCDictManager {
6869
}
6970

7071
@JvmStatic
71-
external fun openccDictConv(src: String, dest: String, mode: Boolean)
72+
fun convertLine(input: String, configFileName: String): String {
73+
if (configFileName.isEmpty()) return input
74+
with(File(Rime.getRimeUserDataDir(), "opencc/$configFileName")) {
75+
if (exists()) return openCCLineConv(input, path)
76+
}
77+
with(File(Rime.get_shared_data_dir(), "opencc/$configFileName")) {
78+
if (exists()) return openCCLineConv(input, path)
79+
}
80+
Timber.w("Specified config $configFileName doesn't exist, returning raw input ...")
81+
return input
82+
}
83+
84+
@JvmStatic
85+
external fun openCCDictConv(src: String, dest: String, mode: Boolean)
86+
87+
@JvmStatic
88+
external fun openCCLineConv(input: String, configFileName: String): String
89+
90+
@JvmStatic
91+
external fun getOpenCCVersion(): String
7292

7393
const val MODE_BIN_TO_TXT = true // OCD2 to TXT
7494
const val MODE_TXT_TO_BIN = false // TXT to OCD2

app/src/main/java/com/osfans/trime/data/opencc/dict/OpenCCDictionary.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class OpenCCDictionary(file: File) : Dictionary() {
5050

5151
override fun toTextDictionary(dest: File): TextDictionary {
5252
ensureTxt(dest)
53-
OpenCCDictManager.openccDictConv(
53+
OpenCCDictManager.openCCDictConv(
5454
file.absolutePath,
5555
dest.absolutePath,
5656
OpenCCDictManager.MODE_BIN_TO_TXT

app/src/main/java/com/osfans/trime/data/opencc/dict/TextDictionary.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class TextDictionary(file: File) : Dictionary() {
2323

2424
override fun toOpenCCDictionary(dest: File): OpenCCDictionary {
2525
ensureBin(dest)
26-
OpenCCDictManager.openccDictConv(
26+
OpenCCDictManager.openCCDictConv(
2727
file.absolutePath,
2828
dest.absolutePath,
2929
OpenCCDictManager.MODE_TXT_TO_BIN

app/src/main/java/com/osfans/trime/ime/core/Speech.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import androidx.annotation.StringRes;
2929
import com.blankj.utilcode.util.ToastUtils;
3030
import com.osfans.trime.R;
31-
import com.osfans.trime.core.Rime;
31+
import com.osfans.trime.data.opencc.OpenCCDictManager;
3232
import com.osfans.trime.data.theme.Config;
3333
import java.util.ArrayList;
3434
import java.util.Arrays;
@@ -110,7 +110,8 @@ public void onResults(Bundle results) {
110110
final ArrayList<String> matches =
111111
results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
112112
final String openccConfig = Config.get().style.getString("speech_opencc_config");
113-
for (String result : matches) trime.commitText(Rime.openccConvert(result, openccConfig));
113+
for (String result : matches)
114+
trime.commitText(OpenCCDictManager.convertLine(result, openccConfig));
114115
}
115116
}
116117

app/src/main/java/com/osfans/trime/ui/fragments/AboutFragment.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.blankj.utilcode.util.ToastUtils
1212
import com.osfans.trime.BuildConfig
1313
import com.osfans.trime.R
1414
import com.osfans.trime.core.Rime
15+
import com.osfans.trime.data.opencc.OpenCCDictManager
1516
import com.osfans.trime.ui.components.PaddingPreferenceFragment
1617
import com.osfans.trime.ui.main.MainViewModel
1718
import com.osfans.trime.util.AppVersionUtils.writeLibraryVersionToSummary
@@ -44,7 +45,7 @@ class AboutFragment : PaddingPreferenceFragment() {
4445
get<Preference>("about__librime_version")
4546
?.writeLibraryVersionToSummary(Rime.get_librime_version())
4647
get<Preference>("about__opencc_version")
47-
?.writeLibraryVersionToSummary(Rime.get_opencc_version())
48+
?.writeLibraryVersionToSummary(OpenCCDictManager.getOpenCCVersion())
4849
get<Preference>("pref_trime_custom_qq")
4950
?.hidden()
5051
get<Preference>("about__open_source_licenses")?.apply {

app/src/main/jni/librime_jni/opencc.cc

+12-26
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,35 @@
33
#include <opencc/SimpleConverter.hpp>
44
#include <opencc/DictConverter.hpp>
55
#include "rime_jni.h"
6-
using namespace opencc;
7-
using std::string;
6+
#include "jni-utils.h"
87

98
// opencc
109

1110
extern "C"
1211
JNIEXPORT jstring JNICALL
13-
Java_com_osfans_trime_core_Rime_get_1opencc_1version(JNIEnv *env, jclass thiz) {
12+
Java_com_osfans_trime_data_opencc_OpenCCDictManager_getOpenCCVersion(JNIEnv *env, jclass clazz) {
1413
return env->NewStringUTF(OPENCC_VERSION);
1514
}
1615

1716
extern "C"
1817
JNIEXPORT jstring JNICALL
19-
Java_com_osfans_trime_core_Rime_opencc_1convert(JNIEnv *env, jclass thiz, jstring line, jstring name) {
20-
if (name == NULL) return line;
21-
const char* s = env->GetStringUTFChars(name, NULL);
22-
string str(s);
23-
SimpleConverter converter(str);
24-
env->ReleaseStringUTFChars(name, s);
25-
const char* input = env->GetStringUTFChars(line, NULL);
26-
const string& converted = converter.Convert(input);
27-
env->ReleaseStringUTFChars(line, input);
28-
s = converted.c_str();
29-
return env->NewStringUTF(s);
18+
Java_com_osfans_trime_data_opencc_OpenCCDictManager_openCCLineConv(JNIEnv *env, jclass clazz,
19+
jstring input,
20+
jstring config_file_name) {
21+
opencc::SimpleConverter converter(CString(env, config_file_name));
22+
return env->NewStringUTF(converter.Convert(*CString(env, input)).data());
3023
}
3124

3225
extern "C"
3326
JNIEXPORT void JNICALL
34-
Java_com_osfans_trime_data_opencc_OpenCCDictManager_openccDictConv(JNIEnv *env, jclass clazz,
27+
Java_com_osfans_trime_data_opencc_OpenCCDictManager_openCCDictConv(JNIEnv *env, jclass clazz,
3528
jstring src, jstring dest,
3629
jboolean mode) {
37-
using namespace opencc;
38-
const char *src_file = env->GetStringUTFChars(src, nullptr);
39-
const char *dest_file = env->GetStringUTFChars(dest, nullptr);
30+
auto src_file = CString(env, src);
31+
auto dest_file = CString(env, dest);
4032
if (mode) {
41-
std::string from = "ocd2";
42-
std::string to = "text";
43-
ConvertDictionary(src_file, dest_file, from, to);
33+
opencc::ConvertDictionary(src_file, dest_file, "ocd2", "text");
4434
} else {
45-
std::string from = "text";
46-
std::string to = "ocd2";
47-
ConvertDictionary(src_file, dest_file, from, to);
35+
opencc::ConvertDictionary(src_file, dest_file, "text", "ocd2");
4836
}
49-
env->ReleaseStringUTFChars(src, src_file);
50-
env->ReleaseStringUTFChars(dest, dest_file);
5137
}

0 commit comments

Comments
 (0)