diff options
author | Hiroshi Sumita <hsumita@google.com> | 2011-12-01 11:31:56 +0900 |
---|---|---|
committer | Hiroshi Sumita <hsumita@google.com> | 2011-12-01 11:31:56 +0900 |
commit | 2577412d557b5d86f49193cff5185ddf179878f3 (patch) | |
tree | 6b3d5f34e633310ccb7e3e778732eac034ca1272 | |
parent | abf1fe97a38c06e6a05c112d9ac0a29264e96cf8 (diff) | |
download | pyzy-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.am | 2 | ||||
-rw-r--r-- | src/PyZyCandidates.cc | 48 | ||||
-rw-r--r-- | src/PyZyCandidates.h | 47 | ||||
-rw-r--r-- | src/PyZyInputContext.h | 9 | ||||
-rw-r--r-- | src/PyZyPhoneticContext.h | 8 | ||||
-rw-r--r-- | src/PyZyPinyinContext.cc | 7 | ||||
-rw-r--r-- | src/PyZyTest.cc | 58 |
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 ()); |