summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcin Mielniczuk <marmistrz.dev@zoho.eu>2018-12-27 16:56:18 +0100
committerPeng Wu <alexepico@gmail.com>2019-01-03 13:53:03 +0800
commit42b2a4c1fbef71dadc97d0a820d96db977393495 (patch)
tree10c1c959565f1971110f5ec9a79dbabbf4854f5a
parentdd4699124dbaacf5119092d82c090917b78a5f1a (diff)
downloadibus-libpinyin-42b2a4c1fbef71dadc97d0a820d96db977393495.tar.gz
ibus-libpinyin-42b2a4c1fbef71dadc97d0a820d96db977393495.tar.xz
ibus-libpinyin-42b2a4c1fbef71dadc97d0a820d96db977393495.zip
Support configurable opencc config
-rw-r--r--data/com.github.libpinyin.ibus-libpinyin.gschema.xml4
-rw-r--r--src/PYConfig.cc1
-rw-r--r--src/PYConfig.h2
-rw-r--r--src/PYPConfig.cc5
-rw-r--r--src/PYPPhoneticEditor.cc2
-rw-r--r--src/PYPSuggestionEditor.cc2
-rw-r--r--src/PYPTradCandidates.cc5
-rw-r--r--src/PYPTradCandidates.h5
-rw-r--r--src/PYSimpTradConverter.cc6
-rw-r--r--src/PYSimpTradConverter.h6
10 files changed, 28 insertions, 10 deletions
diff --git a/data/com.github.libpinyin.ibus-libpinyin.gschema.xml b/data/com.github.libpinyin.ibus-libpinyin.gschema.xml
index aa2526b..df5e432 100644
--- a/data/com.github.libpinyin.ibus-libpinyin.gschema.xml
+++ b/data/com.github.libpinyin.ibus-libpinyin.gschema.xml
@@ -185,6 +185,10 @@
<default>false</default>
<summary>Show Suggestions</summary>
</key>
+ <key name="opencc-config" type="s">
+ <default>'s2t.json'</default>
+ <summary>The config file which should be used by OpenCC for traditional input. Please consult the OpenCC documentation for more information</summary>
+ </key>
</schema>
<schema path="/com/github/libpinyin/ibus-libpinyin/libbopomofo/" id="com.github.libpinyin.ibus-libpinyin.libbopomofo">
<key name="auxiliary-select-key-f" type="i">
diff --git a/src/PYConfig.cc b/src/PYConfig.cc
index b07ad54..37b173a 100644
--- a/src/PYConfig.cc
+++ b/src/PYConfig.cc
@@ -61,6 +61,7 @@ Config::initDefaultValues (void)
m_dictionaries = "";
m_lua_converter = "";
+ m_opencc_config = "s2t.json";
m_main_switch = "<Shift>";
m_letter_switch = "";
diff --git a/src/PYConfig.h b/src/PYConfig.h
index 3a01762..213d6c0 100644
--- a/src/PYConfig.h
+++ b/src/PYConfig.h
@@ -69,6 +69,7 @@ public:
std::string letterSwitch (void) const { return m_letter_switch; }
std::string punctSwitch (void) const { return m_punct_switch; }
std::string tradSwitch (void) const { return m_trad_switch; }
+ std::string openccConfig (void) const { return m_opencc_config; }
protected:
bool read (const gchar * name, bool defval);
@@ -90,6 +91,7 @@ protected:
std::string m_schema_id;
std::string m_dictionaries;
std::string m_lua_converter;
+ std::string m_opencc_config;
pinyin_option_t m_option;
pinyin_option_t m_option_mask;
diff --git a/src/PYPConfig.cc b/src/PYPConfig.cc
index a0f2d76..e7165e1 100644
--- a/src/PYPConfig.cc
+++ b/src/PYPConfig.cc
@@ -48,6 +48,7 @@ const gchar * const CONFIG_INIT_FULL_PUNCT = "init-full-punct";
const gchar * const CONFIG_INIT_SIMP_CHINESE = "init-simplified-chinese";
const gchar * const CONFIG_DICTIONARIES = "dictionaries";
const gchar * const CONFIG_LUA_CONVERTER = "lua-converter";
+const gchar * const CONFIG_OPENCC_CONFIG = "opencc-config";
const gchar * const CONFIG_BOPOMOFO_KEYBOARD_MAPPING = "bopomofo-keyboard-mapping";
const gchar * const CONFIG_SELECT_KEYS = "select-keys";
const gchar * const CONFIG_GUIDE_KEY = "guide-key";
@@ -118,6 +119,7 @@ LibPinyinConfig::initDefaultValues (void)
m_dictionaries = "";
m_lua_converter = "";
+ m_opencc_config = "s2t.json";
m_main_switch = "<Shift>";
m_letter_switch = "";
@@ -400,6 +402,7 @@ PinyinConfig::readDefaultValues (void)
m_minus_equal_page = read (CONFIG_MINUS_EQUAL_PAGE, true);
m_comma_period_page = read (CONFIG_COMMA_PERIOD_PAGE, true);
m_auto_commit = read (CONFIG_AUTO_COMMIT, false);
+ m_opencc_config = read (CONFIG_OPENCC_CONFIG, "s2t.json");
/* lua */
m_lua_converter = read (CONFIG_LUA_CONVERTER, "");
@@ -464,6 +467,8 @@ PinyinConfig::valueChanged (const std::string &schema_id,
m_comma_period_page = normalizeGVariant (value, true);
else if (CONFIG_LUA_CONVERTER == name)
m_lua_converter = normalizeGVariant (value, std::string (""));
+ else if (CONFIG_OPENCC_CONFIG == name)
+ m_opencc_config = normalizeGVariant (value, std::string (""));
else if (CONFIG_AUTO_COMMIT == name)
m_auto_commit = normalizeGVariant (value, false);
else if (CONFIG_IMPORT_DICTIONARY == name) {
diff --git a/src/PYPPhoneticEditor.cc b/src/PYPPhoneticEditor.cc
index e39b6ba..9755e77 100644
--- a/src/PYPPhoneticEditor.cc
+++ b/src/PYPPhoneticEditor.cc
@@ -38,7 +38,7 @@ PhoneticEditor::PhoneticEditor (PinyinProperties &props,
m_lua_converter_candidates (this),
#endif
m_emoji_candidates (this),
- m_traditional_candidates (this)
+ m_traditional_candidates (this, config)
{
}
diff --git a/src/PYPSuggestionEditor.cc b/src/PYPSuggestionEditor.cc
index 8dbda4c..3f543b2 100644
--- a/src/PYPSuggestionEditor.cc
+++ b/src/PYPSuggestionEditor.cc
@@ -35,7 +35,7 @@ SuggestionEditor::SuggestionEditor (PinyinProperties &props,
m_lua_trigger_candidates (this),
m_lua_converter_candidates (this),
#endif
- m_traditional_candidates (this)
+ m_traditional_candidates (this, config)
{
/* use m_text to store the prefix string. */
m_text = "";
diff --git a/src/PYPTradCandidates.cc b/src/PYPTradCandidates.cc
index d625164..c16b669 100644
--- a/src/PYPTradCandidates.cc
+++ b/src/PYPTradCandidates.cc
@@ -23,7 +23,6 @@
#include <assert.h>
#include "PYString.h"
#include "PYPPhoneticEditor.h"
-#include "PYSimpTradConverter.h"
using namespace PY;
@@ -42,7 +41,7 @@ TraditionalCandidates::processCandidates (std::vector<EnhancedCandidate> & candi
enhanced.m_candidate_id = i;
trad.truncate (0);
- SimpTradConverter::simpToTrad (enhanced.m_display_string.c_str (), trad);
+ m_converter.simpToTrad (enhanced.m_display_string.c_str (), trad);
enhanced.m_display_string = trad;
}
@@ -62,7 +61,7 @@ TraditionalCandidates::selectCandidate (EnhancedCandidate & enhanced)
if (action & SELECT_CANDIDATE_MODIFY_IN_PLACE) {
String trad;
- SimpTradConverter::simpToTrad
+ m_converter.simpToTrad
(m_candidates[id].m_display_string.c_str (), trad);
enhanced.m_display_string = trad;
}
diff --git a/src/PYPTradCandidates.h b/src/PYPTradCandidates.h
index f3e1a56..377206c 100644
--- a/src/PYPTradCandidates.h
+++ b/src/PYPTradCandidates.h
@@ -24,6 +24,8 @@
#include <vector>
#include "PYPEnhancedCandidates.h"
+#include "PYConfig.h"
+#include "PYSimpTradConverter.h"
namespace PY {
@@ -31,7 +33,7 @@ class Editor;
class TraditionalCandidates : public EnhancedCandidates<Editor> {
public:
- TraditionalCandidates (Editor *editor) {
+ TraditionalCandidates (Editor *editor, Config & config) : m_converter(config) {
m_editor = editor;
}
@@ -42,6 +44,7 @@ public:
protected:
std::vector<EnhancedCandidate> m_candidates;
+ SimpTradConverter m_converter;
};
};
diff --git a/src/PYSimpTradConverter.cc b/src/PYSimpTradConverter.cc
index db20666..8f0d790 100644
--- a/src/PYSimpTradConverter.cc
+++ b/src/PYSimpTradConverter.cc
@@ -41,9 +41,9 @@ namespace PY {
class opencc {
public:
- opencc (void)
+ opencc (const char* configFileName)
{
- m_cc = opencc_open (OPENCC_DEFAULT_CONFIG_SIMP_TO_TRAD);
+ m_cc = opencc_open (configFileName);
g_assert (m_cc != NULL);
}
@@ -66,7 +66,7 @@ private:
void
SimpTradConverter::simpToTrad (const gchar *in, String &out)
{
- static opencc opencc;
+ static opencc opencc(m_config.openccConfig().c_str());
opencc.convert (in, out);
}
diff --git a/src/PYSimpTradConverter.h b/src/PYSimpTradConverter.h
index 0fe5c2a..aa26c3e 100644
--- a/src/PYSimpTradConverter.h
+++ b/src/PYSimpTradConverter.h
@@ -22,6 +22,7 @@
#define __PY_SIMP_TRAD_CONVERTER_H_
#include <glib.h>
+#include "PYConfig.h"
namespace PY {
@@ -29,7 +30,10 @@ class String;
class SimpTradConverter {
public:
- static void simpToTrad (const gchar *in, String &out);
+ SimpTradConverter(Config & config) : m_config(config) {}
+ void simpToTrad (const gchar *in, String &out);
+private:
+ Config & m_config;
};
};