9
9
#include < rime/composition.h>
10
10
#include < rime/engine.h>
11
11
#include < rime/key_event.h>
12
+ #include < rime/language.h>
12
13
#include < rime/schema.h>
13
14
#include < rime/ticket.h>
14
15
#include < rime/dict/dictionary.h>
@@ -65,6 +66,13 @@ Memory::Memory(const Ticket& ticket) {
65
66
}
66
67
}
67
68
69
+ // user dictionary is named after language; dictionary name may have an
70
+ // optional suffix separated from the language component by dot.
71
+ language_.reset (new Language{
72
+ user_dict_ ? user_dict_->name () :
73
+ Language::get_language_component (dict_->name ())
74
+ });
75
+
68
76
Context* ctx = ticket.engine ->context ();
69
77
commit_connection_ = ctx->commit_notifier ().connect (
70
78
[this ](Context* ctx) { OnCommit (ctx); });
@@ -100,7 +108,7 @@ void Memory::OnCommit(Context* ctx) {
100
108
for (auto & seg : ctx->composition ()) {
101
109
auto phrase = As<Phrase>(Candidate::GetGenuineCandidate (
102
110
seg.GetSelectedCandidate ()));
103
- bool recognized = phrase && phrase-> language () == language ( );
111
+ bool recognized = Language::intelligible ( phrase, this );
104
112
if (recognized) {
105
113
commit_entry.AppendPhrase (phrase);
106
114
}
@@ -119,8 +127,7 @@ void Memory::OnDeleteEntry(Context* ctx) {
119
127
return ;
120
128
auto phrase = As<Phrase>(Candidate::GetGenuineCandidate (
121
129
ctx->GetSelectedCandidate ()));
122
- bool recognized = phrase && phrase->language () == language ();
123
- if (recognized) {
130
+ if (Language::intelligible (phrase, this )) {
124
131
const DictEntry& entry (phrase->entry ());
125
132
LOG (INFO) << " deleting entry: '" << entry.text << " '." ;
126
133
user_dict_->UpdateEntry (entry, -1 ); // mark as deleted in user dict
0 commit comments