summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi Sumita <hsumita@google.com>2011-12-01 11:31:56 +0900
committerHiroshi Sumita <hsumita@google.com>2011-12-01 11:31:56 +0900
commit2577412d557b5d86f49193cff5185ddf179878f3 (patch)
tree6b3d5f34e633310ccb7e3e778732eac034ca1272
parentabf1fe97a38c06e6a05c112d9ac0a29264e96cf8 (diff)
downloadpyzy-2577412d557b5d86f49193cff5185ddf179878f3.tar.gz
Modify API of candidates().
This CL changes API only. Internal behavior will be changed in another CL. BUG=None TEST=Run a test Review URL: http://codereview.appspot.com/5437086
-rw-r--r--src/Makefile.am2
-rw-r--r--src/PyZyCandidates.cc48
-rw-r--r--src/PyZyCandidates.h47
-rw-r--r--src/PyZyInputContext.h9
-rw-r--r--src/PyZyPhoneticContext.h8
-rw-r--r--src/PyZyPinyinContext.cc7
-rw-r--r--src/PyZyTest.cc58
7 files changed, 141 insertions, 38 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 89a442b..5c531b7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -53,6 +53,7 @@ libpyzy_built_h_sources = \
libpyzy_c_sources = \
PyZyInputContext.cc \
PyZyBopomofoContext.cc \
+ PyZyCandidates.cc \
PyZyConfig.cc \
PyZyDatabase.cc \
PyZyDoublePinyinContext.cc \
@@ -70,6 +71,7 @@ libpyzy_h_sources = \
PyZyInputContext.h \
PyZyBopomofo.h \
PyZyBopomofoContext.h \
+ PyZyCandidates.h \
PyZyConfig.h \
PyZyDatabase.h \
PyZyDoublePinyinContext.h \
diff --git a/src/PyZyCandidates.cc b/src/PyZyCandidates.cc
new file mode 100644
index 0000000..b1ef424
--- /dev/null
+++ b/src/PyZyCandidates.cc
@@ -0,0 +1,48 @@
+/* vim:set et ts=4 sts=4:
+ *
+ * libpyzy - The Chinese PinYin and Bopomofo conversion library.
+ *
+ * Copyright (c) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#include "PyZyCandidates.h"
+
+namespace PyZy {
+
+ConcreteCandidates::~ConcreteCandidates () {
+}
+
+const Candidate & ConcreteCandidates::get (size_t index) const {
+ return m_candidates[index];
+}
+
+const size_t ConcreteCandidates::size () const {
+ // TODO(hsumita): replace it.
+ // return m_size;
+ return m_candidates.size ();
+}
+
+void ConcreteCandidates::clear() {
+ m_candidates.clear ();
+}
+
+void ConcreteCandidates::push_back (const Candidate &candidate) {
+ m_candidates.push_back (candidate);
+}
+
+} // namespace PyZy
diff --git a/src/PyZyCandidates.h b/src/PyZyCandidates.h
new file mode 100644
index 0000000..1a1aac4
--- /dev/null
+++ b/src/PyZyCandidates.h
@@ -0,0 +1,47 @@
+/* vim:set et ts=4 sts=4:
+ *
+ * libpyzy - The Chinese PinYin and Bopomofo conversion library.
+ *
+ * Copyright (c) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+#ifndef __PYZY_CANDIDATES_H_
+#define __PYZY_CANDIDATES_H_
+
+#include "PyZyInputContext.h"
+
+#include <string>
+#include <vector>
+
+namespace PyZy {
+
+class ConcreteCandidates : public Candidates {
+public:
+ virtual ~ConcreteCandidates();
+ virtual const Candidate & get (size_t index) const;
+ virtual const size_t size () const;
+ virtual void clear ();
+ virtual void push_back (const Candidate &candidate);
+
+private:
+ std::vector<Candidate> m_candidates;
+ size_t m_size;
+};
+
+} // namespace PyZy
+
+#endif // __PYZY_CANDIDATES_H_
diff --git a/src/PyZyInputContext.h b/src/PyZyInputContext.h
index 5187731..88275fb 100644
--- a/src/PyZyInputContext.h
+++ b/src/PyZyInputContext.h
@@ -40,6 +40,13 @@ struct Candidate {
CandidateType type;
};
+class Candidates {
+public:
+ virtual ~Candidates () { }
+ virtual const Candidate & get (size_t index) const = 0;
+ virtual const size_t size () const = 0;
+};
+
class InputContext {
public:
virtual ~InputContext (void) { }
@@ -107,7 +114,7 @@ public:
virtual const std::string & restText (void) const = 0;
virtual const std::string & auxiliaryText (void) const = 0;
// TODO(hsumita): Change return value to "class Candidates".
- virtual const std::vector<Candidate> & candidates () const = 0;
+ virtual const Candidates & candidates () const = 0;
virtual unsigned int cursor () const = 0;
virtual unsigned int focusedCandidate () const = 0;
};
diff --git a/src/PyZyPhoneticContext.h b/src/PyZyPhoneticContext.h
index e68e72a..f479d40 100644
--- a/src/PyZyPhoneticContext.h
+++ b/src/PyZyPhoneticContext.h
@@ -25,6 +25,7 @@
#include <string>
#include <vector>
#include "PyZyInputContext.h"
+#include "PyZyCandidates.h"
#include "PyZyConfig.h"
#include "PyZyPinyinArray.h"
#include "PyZyPhraseEditor.h"
@@ -44,7 +45,6 @@ struct Preedit {
}
};
-
class PhoneticContext : public InputContext {
public:
PhoneticContext (Config & config, PhoneticContext::Observer *observer);
@@ -52,7 +52,7 @@ public:
/* API of InputContext */
virtual void reset (void);
-
+
bool selectCandidate (size_t i);
bool focusCandidate (size_t i);
bool focusCandidatePrevious ();
@@ -69,7 +69,7 @@ public:
virtual const std::string & conversionText (void) const { return m_preedit_text.candidate_text; }
virtual const std::string & restText (void) const { return m_preedit_text.rest_text; }
virtual const std::string & auxiliaryText (void) const { return m_auxiliary_text; }
- virtual const std::vector<Candidate> & candidates () const { return m_candidates; }
+ virtual const Candidates & candidates () const { return m_candidates; }
virtual unsigned int cursor () const { return m_cursor; }
virtual unsigned int focusedCandidate () const { return m_focused_candidate; }
@@ -120,8 +120,8 @@ protected:
std::string m_selected_special_phrase;
String m_text;
Preedit m_preedit_text;
- std::vector<Candidate> m_candidates;
std::string m_auxiliary_text;
+ ConcreteCandidates m_candidates;
private:
PhoneticContext::Observer *m_observer;
diff --git a/src/PyZyPinyinContext.cc b/src/PyZyPinyinContext.cc
index 9641f36..3447b2e 100644
--- a/src/PyZyPinyinContext.cc
+++ b/src/PyZyPinyinContext.cc
@@ -102,7 +102,6 @@ PinyinContext::updatePreeditText ()
if (m_candidates.size () > 0) {
size_t index = m_focused_candidate;
-
if (index < m_special_phrases.size ()) {
m_buffer << m_special_phrases[index];
edit_end_word = m_buffer.utf8Length ();
@@ -129,7 +128,7 @@ PinyinContext::updatePreeditText ()
size_t candidate_end = edit_begin_word + candidate.len;
m_buffer << m_pinyin[edit_begin_word]->sheng << m_pinyin[edit_begin_word]->yun;
-
+
for (size_t i = edit_begin_word + 1; i < candidate_end; i++) {
m_buffer << ' ' << m_pinyin[i]->sheng << m_pinyin[i]->yun;
}
@@ -179,7 +178,7 @@ PinyinContext::updateAuxiliaryText (void)
m_buffer << p->sheng
<< p->yun;
}
-
+
if (G_UNLIKELY (m_pinyin_len == m_cursor)) {
/* aux = pinyin + non-pinyin */
// cursor_pos = m_buffer.utf8Length ();
@@ -200,7 +199,7 @@ PinyinContext::updateAuxiliaryText (void)
m_buffer << '|' << textAfterCursor ();
}
}
-
+
m_auxiliary_text = m_buffer;
PhoneticContext::updateAuxiliaryText ();
}
diff --git a/src/PyZyTest.cc b/src/PyZyTest.cc
index 057207f..1682736 100644
--- a/src/PyZyTest.cc
+++ b/src/PyZyTest.cc
@@ -217,7 +217,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
context.selectCandidate (0);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -235,7 +235,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
insertKeys (context, "aazhii");
EXPECT_EQ (6, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("啊啊之", context.conversionText ());
EXPECT_EQ ("i", context.restText ());
@@ -249,7 +249,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
context.moveCursorLeft ();
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("AA制", context.conversionText ());
EXPECT_EQ ("i", context.restText ());
@@ -263,7 +263,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
context.selectCandidate (0);
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("AA制", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("i", context.restText ());
@@ -277,7 +277,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
context.commit (InputContext::TYPE_CONVERTED);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -407,7 +407,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
context.removeWordBefore ();
EXPECT_EQ (2, context.cursor ());
- EXPECT_EQ ("aa", context.inputText ());
+ EXPECT_EQ ("aa", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("啊啊", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -421,7 +421,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
insertKeys (context, "nihao");
EXPECT_EQ (7, context.cursor ());
- EXPECT_EQ ("aanihao", context.inputText ());
+ EXPECT_EQ ("aanihao", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("啊啊你好", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -435,7 +435,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
context.selectCandidate (1);
EXPECT_EQ (7, context.cursor ());
- EXPECT_EQ ("aanihao", context.inputText ());
+ EXPECT_EQ ("aanihao", context.inputText ());
EXPECT_EQ ("啊啊", context.selectedText ());
EXPECT_EQ ("你好", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -449,7 +449,7 @@ TEST_F (PyZyTest, FullPinyinBasicTest) {
observer.clear ();
context.commit (InputContext::TYPE_CONVERTED);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -568,7 +568,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
insertKeys (context, "aazhi");
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhi", context.inputText ());
+ EXPECT_EQ ("aazhi", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("AA制", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -582,7 +582,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
context.selectCandidate (0);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -600,7 +600,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
insertKeys (context, "aazhii");
EXPECT_EQ (6, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("啊展翅", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -614,7 +614,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
context.moveCursorLeft ();
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("AA制", context.conversionText ());
EXPECT_EQ ("i", context.restText ());
@@ -628,7 +628,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
context.selectCandidate (0);
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("AA制", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("i", context.restText ());
@@ -642,7 +642,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
context.commit (InputContext::TYPE_CONVERTED);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -773,7 +773,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
context.removeWordBefore ();
EXPECT_EQ (4, context.cursor ());
- EXPECT_EQ ("aazh", context.inputText ());
+ EXPECT_EQ ("aazh", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("啊张", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -787,7 +787,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
insertKeys (context, "nihk");
EXPECT_EQ (8, context.cursor ());
- EXPECT_EQ ("aazhnihk", context.inputText ());
+ EXPECT_EQ ("aazhnihk", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("啊张你好", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -801,7 +801,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
context.selectCandidate (1);
EXPECT_EQ (8, context.cursor ());
- EXPECT_EQ ("aazhnihk", context.inputText ());
+ EXPECT_EQ ("aazhnihk", context.inputText ());
EXPECT_EQ ("啊", context.selectedText ());
EXPECT_EQ ("张你好", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -815,7 +815,7 @@ TEST_F (PyZyTest, DoublePinyinBasicTest) {
observer.clear ();
context.commit (InputContext::TYPE_CONVERTED);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -934,7 +934,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
insertKeys (context, "aazhi");
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhi", context.inputText ());
+ EXPECT_EQ ("aazhi", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("妈妈好吃哦", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -948,7 +948,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
context.selectCandidate (0);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -966,7 +966,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
insertKeys (context, "aazhii");
EXPECT_EQ (6, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("妈妈好吃哦哦", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -980,7 +980,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
context.moveCursorLeft ();
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("ㄇㄇㄈㄘㄛ ㄛ", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -994,7 +994,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
context.selectCandidate (0);
EXPECT_EQ (5, context.cursor ());
- EXPECT_EQ ("aazhii", context.inputText ());
+ EXPECT_EQ ("aazhii", context.inputText ());
EXPECT_EQ ("妈妈好吃哦", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("ㄛ", context.restText ());
@@ -1008,7 +1008,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
context.commit (InputContext::TYPE_CONVERTED);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -1141,7 +1141,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
context.removeWordBefore ();
EXPECT_EQ (4, context.cursor ());
- EXPECT_EQ ("aazh", context.inputText ());
+ EXPECT_EQ ("aazh", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("妈妈好吃", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -1155,7 +1155,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
insertKeys (context, "nihk");
EXPECT_EQ (8, context.cursor ());
- EXPECT_EQ ("aazhnihk", context.inputText ());
+ EXPECT_EQ ("aazhnihk", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("妈妈好吃是哦车", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -1169,7 +1169,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
context.selectCandidate (1);
EXPECT_EQ (8, context.cursor ());
- EXPECT_EQ ("aazhnihk", context.inputText ());
+ EXPECT_EQ ("aazhnihk", context.inputText ());
EXPECT_EQ ("妈妈", context.selectedText ());
EXPECT_EQ ("好吃是哦车", context.conversionText ());
EXPECT_EQ ("", context.restText ());
@@ -1183,7 +1183,7 @@ TEST_F (PyZyTest, BopomofoBasicTest) {
observer.clear ();
context.commit (InputContext::TYPE_CONVERTED);
EXPECT_EQ (0, context.cursor ());
- EXPECT_EQ ("", context.inputText ());
+ EXPECT_EQ ("", context.inputText ());
EXPECT_EQ ("", context.selectedText ());
EXPECT_EQ ("", context.conversionText ());
EXPECT_EQ ("", context.restText ());