summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2018-06-19 16:13:47 +0800
committerPeng Wu <alexepico@gmail.com>2018-06-19 16:13:47 +0800
commitd0d1622c759e73e0a8bb4763ca8f8fb6a98224a2 (patch)
treebcc0c777f1dc10c89d52f1e77686905ae7e24a95
parentbe71008ef85648271c24a93f43f27423c17b5c21 (diff)
downloadibus-libpinyin-d0d1622c759e73e0a8bb4763ca8f8fb6a98224a2.tar.gz
ibus-libpinyin-d0d1622c759e73e0a8bb4763ca8f8fb6a98224a2.tar.xz
ibus-libpinyin-d0d1622c759e73e0a8bb4763ca8f8fb6a98224a2.zip
write class SuggestionEditor
-rw-r--r--src/PYPSuggestionEditor.cc73
-rw-r--r--src/PYPSuggestionEditor.h24
2 files changed, 82 insertions, 15 deletions
diff --git a/src/PYPSuggestionEditor.cc b/src/PYPSuggestionEditor.cc
index 3a190a5..ba98fb6 100644
--- a/src/PYPSuggestionEditor.cc
+++ b/src/PYPSuggestionEditor.cc
@@ -23,12 +23,19 @@
#include <assert.h>
#include "PYConfig.h"
#include "PYLibPinyin.h"
+#include "PYPinyinProperties.h"
using namespace PY;
SuggestionEditor::SuggestionEditor (PinyinProperties &props,
Config & config)
- : Editor (props, config)
+ : Editor (props, config),
+ m_suggestion_candidates (this),
+#ifdef IBUS_BUILD_LUA_EXTENSION
+ m_lua_trigger_candidates (this),
+ m_lua_converter_candidates (this),
+#endif
+ m_traditional_candidates (this)
{
/* use m_text to store the prefix string. */
m_text = "";
@@ -267,35 +274,71 @@ SuggestionEditor::updateLookupTable (void)
}
gboolean
-SuggestionEditor::updateCandidates ()
+SuggestionEditor::updateCandidates (void)
{
- assert (FALSE);
+ m_candidates.clear ();
+
+ m_suggestion_candidates.processCandidates (m_candidates);
+
+ if (!m_props.modeSimp ())
+ m_traditional_candidates.processCandidates (m_candidates);
+
+#ifdef IBUS_BUILD_LUA_EXTENSION
+ m_lua_trigger_candidates.processCandidates (m_candidates);
+
+ std::string converter = m_config.luaConverter ();
+
+ if (!converter.empty ()) {
+ m_lua_converter_candidates.setConverter (converter.c_str ());
+ m_lua_converter_candidates.processCandidates (m_candidates);
+ }
+#endif
+
+ return TRUE;
}
gboolean
SuggestionEditor::fillLookupTable ()
{
- guint len = 0;
- pinyin_get_n_candidate (m_instance, &len);
+ String word;
+ for (guint i = 0; i < m_candidates.size (); i++) {
+ EnhancedCandidate & candidate = m_candidates[i];
+ word = candidate.m_display_string;
- for (guint i = 0; i < len; i++) {
- lookup_candidate_t * candidate = NULL;
- pinyin_get_candidate (m_instance, i, &candidate);
+ Text text (word);
- lookup_candidate_type_t type;
- pinyin_get_candidate_type (m_instance, candidate, &type);
- assert (PREDICTED_CANDIDATE == type);
+ /* no user candidate in suggestion editor. */
+ assert (CANDIDATE_USER != candidate.m_candidate_type);
- const gchar * phrase_string = NULL;
- pinyin_get_candidate_string (m_instance, candidate, &phrase_string);
-
- Text text (phrase_string);
m_lookup_table.appendCandidate (text);
}
return TRUE;
}
+SelectCandidateAction
+SuggestionEditor::selectCandidateInternal (EnhancedCandidate & candidate)
+{
+ switch (candidate.m_candidate_type) {
+ case CANDIDATE_SUGGESTION:
+ return m_suggestion_candidates.selectCandidate (candidate);
+
+ case CANDIDATE_TRADITIONAL_CHINESE:
+ return m_traditional_candidates.selectCandidate (candidate);
+
+#ifdef IBUS_BUILD_LUA_EXTENSION
+ case CANDIDATE_LUA_TRIGGER:
+ return m_lua_trigger_candidates.selectCandidate (candidate);
+
+ case CANDIDATE_LUA_CONVERTER:
+ return m_lua_converter_candidates.selectCandidate (candidate);
+#endif
+
+ default:
+ assert (FALSE);
+ }
+}
+
void
SuggestionEditor::updatePreeditText (void)
{
diff --git a/src/PYPSuggestionEditor.h b/src/PYPSuggestionEditor.h
index 637dfe0..8276a6a 100644
--- a/src/PYPSuggestionEditor.h
+++ b/src/PYPSuggestionEditor.h
@@ -25,10 +25,19 @@
#include <pinyin.h>
#include "PYEditor.h"
#include "PYLookupTable.h"
+#include "PYPSuggestionCandidates.h"
+#include "PYPTradCandidates.h"
+
+#ifdef IBUS_BUILD_LUA_EXTENSION
+#include "PYPLuaTriggerCandidates.h"
+#include "PYPLuaConverterCandidates.h"
+#endif
namespace PY {
class SuggestionEditor : public Editor {
+ friend class SuggestionCandidates;
+
public:
SuggestionEditor (PinyinProperties &props, Config & config);
virtual ~SuggestionEditor ();
@@ -42,6 +51,9 @@ public:
virtual void reset (void);
virtual void candidateClicked (guint index, guint button, guint state);
+protected:
+ virtual SelectCandidateAction selectCandidateInternal (EnhancedCandidate & candidate);
+
private:
void updateLookupTable (void);
gboolean updateCandidates ();
@@ -65,6 +77,18 @@ private:
/* use LibPinyinBackEnd here. */
pinyin_instance_t *m_instance;
+
+ /* use EnhancedCandidates here. */
+ std::vector<EnhancedCandidate> m_candidates;
+
+ /* several EnhancedCandidates providers. */
+ SuggestionCandidates m_suggestion_candidates;
+ TraditionalCandidates m_traditional_candidates;
+
+#ifdef IBUS_BUILD_LUA_EXTENSION
+ LuaTriggerCandidates m_lua_trigger_candidates;
+ LuaConverterCandidates m_lua_converter_candidates;
+#endif
};
};