Newer
Older
* 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_PHONETIC_CONTEXT_H_
#define __PYZY_PHONETIC_CONTEXT_H_
#include <string>
#include <vector>
#include "PyZyInputContext.h"
#include "PyZyConfig.h"
#include "PyZyPinyinArray.h"
#include "PyZyPhraseEditor.h"
#include "PyZySpecialPhraseTable.h"
namespace PyZy {
struct Preedit {
std::string selected_text;
std::string candidate_text;
std::string rest_text;
void clear () {
selected_text.clear ();
candidate_text.clear ();
rest_text.clear ();
}
};
class PhoneticContext : public InputContext {
public:
PhoneticContext (Config & config, PhoneticContext::Observer *observer);
virtual ~PhoneticContext (void);
bool selectCandidate (size_t i);
bool focusCandidate (size_t i);
bool focusCandidatePrevious ();
bool focusCandidateNext ();
bool resetCandidate (size_t i);
virtual void bopomofoSelectMode () { }
/* Accessors of InputContext. */
virtual std::string inputText () const { return m_text; }
virtual std::string selectedText (void) const { return m_preedit_text.selected_text; }
virtual std::string conversionText (void) const { return m_preedit_text.candidate_text; }
virtual std::string restText (void) const { return m_preedit_text.rest_text; }
virtual std::string auxiliaryText (void) const { return m_auxiliary_text; }
virtual std::vector<Candidate> candidates () const { return m_candidates; }
virtual size_t cursor () const { return m_cursor; }
virtual size_t focusedCandidate () const { return m_focused_candidate; }
virtual void resetContext (void);
virtual void update (void);
virtual void commitText (const std::string & commit_text);
virtual void updateLookupTable (void);
virtual void updateAuxiliaryText (void);
virtual void updatePreeditText (void);
/* inline functions */
void updatePhraseEditor (void)
{
m_phrase_editor.update (m_pinyin);
}
const char * textAfterPinyin () const
return (const char *)m_text + m_pinyin_len;
const char * textAfterPinyin (size_t i) const
{
g_assert (i <= m_pinyin.size ());
if ( G_UNLIKELY (i == 0))
return m_text;
i--;
return (const char *)m_text + m_pinyin[i].begin + m_pinyin[i].len;
const char * textAfterCursor () const
return (const char *)m_text + m_cursor;
}
/* variables */
Config &m_config;
size_t m_cursor;
size_t m_focused_candidate;
String m_buffer;
PhraseEditor m_phrase_editor;
std::vector<std::string> m_special_phrases;
std::string m_selected_special_phrase;
String m_text;
Preedit m_preedit_text;
std::vector<Candidate> m_candidates;
std::string m_auxiliary_text;
private:
PhoneticContext::Observer *m_observer;
#endif // __PYZY_PHONETIC_CONTEXT_H_