Closed mirtlecn closed 10 months ago
@shewer 因为 librime 上个月到现在并无更改,最新一次提交这行判断仍然正常会返回空。所以猜测是上周 librime lua 这边的更改 https://github.com/hchunhui/librime-lua/commit/474b9d95e94e59af3e6d7f7c1b306bce6dae1b62
不知道是否是是预期变化。
目前不会 return false
@shewer 因为 librime 上个月到现在并无更改,最新一次提交这行判断仍然正常会返回空。所以猜测是上周 librime lua 这边的更改 474b9d9
不知道是否是是预期变化。
是的 , 以前的 memory只能得到唯一一個LuaMemory.iter(luaMemory.iter 仍然保留,等同最後一個lookupwords 的iter) 現在可以lookupwords 多次 ,得到多個 DictEntryIterator 你 可以參考 librime 的MergeTranslation(合併+排序 quality) , 把多個 DictEntryIterator 轉成 Transaltion 再合併
不需要 檢查 返回值, 直接調用 :iter() 即可
locla tab = {}
for i=1,26 do
local iter = env.mem:lookupwords(.....) -- input .. string.chra(0x40+i)
tabel.insert(tab, iter)
end
for i,v in next, tab do
for entry in v:iter() do
.....
end
end
local entry_iter1 = env.mem:lookup_words(....)
local entry_iter2 = env.mem:lookup_words(...)
for entry in entry_iter1:iter() do .... end
for entry in entry_iter2:iter() do ... end
for entry in env.mem:lookup_words(....):iter() do
...
end
舊方法需要檢查 返回值
if env.mem:lookup_words(....) then
for entry in env.mem:iter() do --
...
end
end
ok
https://github.com/hchunhui/librime-lua/commit/474b9d95e94e59af3e6d7f7c1b306bce6dae1b62 这个改动有问题,我合并时也没仔细看。 一般情况下新功能不应该破坏现有的接口。 @shewer 我打算先撤回了。如果对 Memory
改动过大没法兼容的话,我觉得可以另起一个 Memory2
之类的。
我检查了代码,似乎可以稍微改改
lookup_words method 是新 method,附在 Dictionary 和 UserDictionary class 上。后两者又是新引入的,从 Memory class 的 dict 和 user_dict 获得。
换句话说,要获取几个 DictEntryIterator,之前没有简便的办法,现在要从 Memory 建立 Dictionary 或者 UserDictionary,然后 lookup_words 接着 iter()
这个逻辑似乎和之前从 Memory dict_lookup(获取一个新的 DictEntryIterator)然后借助 memory:iter_dict 获取 entry 并不冲突。
有办法保留之前 return false 的做法,不然几个脚本的逻辑都要重改,根据 librime 的这个变动得做两套逻辑
env.dict = env.mem.dict
local i = 0
-- in newer librime-lua, env.mem:dict_lookup(inp, false, 1) always return an object
if env.dict then
for e in env.dict:lookup_words(inp, false, 1):iter() do
i = 1
end
else
if env.mem:dict_lookup(inp, false, 1) then
i = 1
end
我先revert了。各位请帮忙看一下如何改比较合适吧,然后重新pr。
474b9d9 这个改动有问题,我合并时也没仔细看。 一般情况下新功能不应该破坏现有的接口。 @shewer 我打算先撤回了。如果对
Memory
改动过大没法兼容的话,我觉得可以另起一个Memory2
之类的。
恢復 dict_lookup user_lookup 接口 return 值 再加上 兩個 return dictentry_iter 的接口 ; 如何?
bool LuaMemory::dictLookup(const string& input, const bool isExpand, size_t limit) {
iter = New<DictEntryIterator>();// t= New<DictEntryIterator>();
limit = limit == 0 ? 0xffffffffffffffff : limit;
if (dict_ && dict_->loaded()) {
return dict_->LookupWords(iter.get(), input, isExpand, limit) > 0;
}
return false;
}
bool LuaMemory::userLookup(const string& input, const bool isExpand) {
uter = New<UserDictEntryIterator>();
if (user_dict_ && user_dict_->loaded()) {
return user_dict_->LookupWords(uter.get(), input, isExpand) > 0;
}
return false;
}
an<DictEntryIterator> LuaMemory::dictiterLookup(const string& input, const bool isExpand, size_t limit) {
dictLookup(input, isExpand, limit);
return iter;
}
an<UserDictEntryIterator> LuaMemory::useriterLookup(const string& input, const bool isExpand) {
userLookup(input, isExpand);
return uter;
}
Author 我已經重新PR 恢復user_lookup dict_lookup return bool , 井增加 useriter_lookup dictiter_lookup return dictentryIterator
你的script 有點問題 , dict 是 memory 的成員 如果 dict == nil env.mem:dict_lookup() 也是取不到 dictentry , 畢竟 mem:dict_lookup() 也是 調用dict 取得 dcitentry
if env.dict then
...
else --- 無效的block
...
end
可用下面方式
local i =false
for entry in env.mem:dict_lookup(str, true , 1):iter() do
i = true
...
end
Author 我已經重新PR 恢復user_lookup dict_lookup return bool , 井增加 useriter_lookup dictiter_lookup return dictentryIterator
你的script 有點問題 , dict 是 memory 的成員 如果 dict == nil env.mem:dict_lookup() 也是取不到 dictentry , 畢竟 mem:dict_lookup() 也是 調用dict 取得 dcitentry
if env.dict then ... else --- 無效的block ... end
可用下面方式
local i =false for entry in env.mem:dict_lookup(str, true , 1):iter() do i = true ... end
我检查了代码并测试过,dict 成员这次 commit 新引入的,之前并不显式的可以获取,如果 dict 成员为 nil 说明 librime 的版本在引起故障的提交前,此时可用 dict lookup 判断是否返回 false,
commit 前 沒有註冊 get_vars , 所以 必定是nil commit 後 如果 Memory() 初始化時 字典調用失敗 ,也會返回 nil dict_lookup() 會先檢查 dict && dict.loaded()
if (dict && dict->loaded()) {
return dict->LookupWords(...) >0;
}
return false;
问题在 revert 后已经不存在,新 PR 与此无关,故关闭
在 lua_translator 中之前用
env.mem:dict_lookup(inp, false, 1)
判断词典有没有完全匹配的词。librime 1.9,一直到 librime 上个月的 nightly 版 都是正常工作的。
从 action 从 https://github.com/hchunhui/librime-lua/commit/474b9d95e94e59af3e6d7f7c1b306bce6dae1b62 这里版本开始,这行代码在无词时仍然返回了一个 class rime::DictEntryIterator>