#include "InputCore.h" #include "Core/Base/global_include.h" #include "Core/system/export.h" namespace YSG { InputCore::InputCore(QObject *parent) : QObject(parent) { } InputCore::~InputCore() { } bool InputCore::getEnable() { return m_able; } void InputCore::setEnable(bool able) { m_able = able; im_flush_cache(); emit signal_input_able(able); } bool InputCore::init(int max_spell_len, int max_out_len) { QString path = QString::fromStdString(Psc::get_exe_dir()); QFile file_pinyin(dict_path); if (!file_pinyin.exists()) { QFile::copy(":/dict_pinyin.dat", path + "/" + dict_path); QFile::setPermissions(path, QFileDevice::ReadOther | QFileDevice::WriteOther); } QFile file_user(dict_user_path); if (!file_user.exists()) { QFile::copy(":/dict_pinyin_user.dat", path + "/" + dict_user_path); QFile::setPermissions(path, QFileDevice::ReadOther | QFileDevice::WriteOther); } m_spell_len = max_spell_len; m_out_len = max_out_len; bool ret = im_open_decoder(QString("%1/" + dict_path).arg(path).toLocal8Bit().data(), QString("%1/" + dict_user_path).arg(path).toLocal8Bit().data()); if (!ret) return ret; im_set_max_lens(static_cast(m_spell_len), static_cast(m_out_len)); reset_search(); m_able = ret; return ret; } void InputCore::deinit() { im_close_decoder(); } void InputCore::reset_search() { if (m_able) im_reset_search(); } unsigned int InputCore::search(const QString &spell) { if (!m_able) return 0; QByteArray bytearray; char *pinyin; bytearray = spell.toUtf8(); pinyin = bytearray.data(); size_t candnum = im_search(pinyin, static_cast(bytearray.size())); if (static_cast(candnum) < m_out_len) { return static_cast(candnum); } return static_cast(m_out_len); } int InputCore::cur_search_pos() { const uint16 *start_pos; size_t pos_len; pos_len = im_get_spl_start_pos(start_pos); return static_cast(pos_len); } QStringList InputCore::get_candidate(unsigned int candnum) { QStringList textList; if (candnum == 0) return textList; char16 *cand_buf = new char16[m_out_len]; for (unsigned int i = 0; i < candnum; i++) { char16 *cand; cand = im_get_candidate(i, cand_buf, static_cast(m_out_len)); if (cand) { textList.append(QString::fromUtf16(cand)); } else { continue; } } delete[] cand_buf; //qDebug()<