12 #include <fcitx-utils/connectableobject.h> 13 #include <fcitx-utils/macros.h> 14 #include "libime/core/decoder.h" 15 #include "libime/core/lattice.h" 16 #include "libime/core/userlanguagemodel.h" 17 #include "libime/pinyin/pinyincorrectionprofile.h" 18 #include "libime/pinyin/pinyindecoder.h" 19 #include "libime/pinyin/pinyindecoder_p.h" 20 #include "libime/pinyin/pinyinencoder.h" 27 std::unique_ptr<UserLanguageModel> model)
28 : fcitx::QPtrHolder<PinyinIME>(q), dict_(std::move(dict)),
29 model_(std::move(model)),
30 decoder_(std::make_unique<PinyinDecoder>(dict_.get(), model_.get())) {
31 model_->setCodeExtractor([](
const WordNode *node) -> std::string {
32 if (
const auto *pinyinNode =
33 dynamic_cast<const PinyinLatticeNode *>(node)) {
34 return pinyinNode->encodedPinyin();
36 if (
const auto *wordNode =
37 dynamic_cast<const PinyinWordNode *>(node)) {
38 return wordNode->encodedPinyin();
44 FCITX_DEFINE_SIGNAL_PRIVATE(
PinyinIME, optionChanged);
46 PinyinFuzzyFlags flags_;
47 std::unique_ptr<PinyinDictionary> dict_;
48 std::unique_ptr<UserLanguageModel> model_;
49 std::unique_ptr<PinyinDecoder> decoder_;
50 std::shared_ptr<const ShuangpinProfile> spProfile_;
51 std::shared_ptr<const PinyinCorrectionProfile> correctionProfile_;
53 size_t beamSize_ = Decoder::beamSizeDefault;
54 size_t frameSize_ = Decoder::frameSizeDefault;
55 size_t partialLongWordLimit_ = 0;
56 size_t wordCandidateLimit_ = 15;
57 float maxDistance_ = std::numeric_limits<float>::max();
58 float minPath_ = -std::numeric_limits<float>::max();
59 PinyinPreeditMode preeditMode_ = PinyinPreeditMode::RawText;
62 PinyinIME::PinyinIME(std::unique_ptr<PinyinDictionary> dict,
63 std::unique_ptr<UserLanguageModel> model)
64 : d_ptr(std::make_unique<PinyinIMEPrivate>(
this, std::move(dict),
67 PinyinIME::~PinyinIME() {}
69 PinyinFuzzyFlags PinyinIME::fuzzyFlags()
const {
74 void PinyinIME::setFuzzyFlags(PinyinFuzzyFlags flags) {
77 emit<PinyinIME::optionChanged>();
82 return d->dict_.get();
87 return d->dict_.get();
92 return d->decoder_.get();
97 return d->model_.get();
102 return d->model_.get();
105 size_t PinyinIME::nbest()
const {
110 void PinyinIME::setNBest(
size_t n) {
112 if (d->nbest_ != n) {
114 emit<PinyinIME::optionChanged>();
118 size_t PinyinIME::beamSize()
const {
123 void PinyinIME::setBeamSize(
size_t n) {
125 if (d->beamSize_ != n) {
127 emit<PinyinIME::optionChanged>();
131 size_t PinyinIME::frameSize()
const {
133 return d->frameSize_;
136 void PinyinIME::setFrameSize(
size_t n) {
138 if (d->frameSize_ != n) {
140 emit<PinyinIME::optionChanged>();
144 size_t PinyinIME::partialLongWordLimit()
const {
146 return d->partialLongWordLimit_;
149 void PinyinIME::setPartialLongWordLimit(
size_t n) {
151 if (d->partialLongWordLimit_ != n) {
152 d->partialLongWordLimit_ = n;
153 emit<PinyinIME::optionChanged>();
159 return d->wordCandidateLimit_;
164 if (d->wordCandidateLimit_ != n) {
165 d->wordCandidateLimit_ = n;
166 emit<PinyinIME::optionChanged>();
170 void PinyinIME::setPreeditMode(PinyinPreeditMode mode) {
172 if (d->preeditMode_ != mode) {
173 d->preeditMode_ = mode;
174 emit<PinyinIME::optionChanged>();
178 PinyinPreeditMode PinyinIME::preeditMode()
const {
180 return d->preeditMode_;
183 void PinyinIME::setScoreFilter(
float maxDistance,
float minPath) {
185 if (d->maxDistance_ != maxDistance || d->minPath_ != minPath) {
186 d->maxDistance_ = maxDistance;
187 d->minPath_ = minPath;
188 emit<PinyinIME::optionChanged>();
192 float PinyinIME::maxDistance()
const {
194 return d->maxDistance_;
197 float PinyinIME::minPath()
const {
202 void PinyinIME::setShuangpinProfile(
203 std::shared_ptr<const ShuangpinProfile> profile) {
205 if (d->spProfile_ != profile) {
206 d->spProfile_ = std::move(profile);
207 emit<PinyinIME::optionChanged>();
211 std::shared_ptr<const ShuangpinProfile> PinyinIME::shuangpinProfile()
const {
213 return d->spProfile_;
216 void PinyinIME::setCorrectionProfile(
217 std::shared_ptr<const PinyinCorrectionProfile> profile) {
219 if (d->correctionProfile_ != profile) {
220 d->correctionProfile_ = std::move(profile);
221 emit<PinyinIME::optionChanged>();
225 std::shared_ptr<const PinyinCorrectionProfile>
226 PinyinIME::correctionProfile()
const {
228 return d->correctionProfile_;
PinyinDictionary is a set of dictionaries for Pinyin.
Provides shared data for PinyinContext.
void setWordCandidateLimit(size_t n)
Set the maximum number of candidates that is a word.
size_t wordCandidateLimit() const
The maximum number of candidates that is a word.