-
Notifications
You must be signed in to change notification settings - Fork 563
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
自造詞進入用戶字典 #947
Comments
如果詞組的編碼種類與詞典不兼容( |
librime/src/rime/gear/memory.cc Lines 109 to 111 in b74f5fa
感謝回覆~您說的是這段邏輯麼,判斷Phrase和Memory的language是否一致。 我學習了下代碼,Memory的language_是構造時取到的,lua裏構造Phrase時從Memory取的language_, https://github.com/hchunhui/librime-lua/blob/fa6563cf7b40f3bfbf09e856420bff8de6820558/src/types.cc#L2041-L2047 所以兩者的屬性應該是一致的。我也通過log打印查看了兩者的lang_name屬性,也的確是我的字典名。一時不知道摸排方向了。 另外想請教下,在windows上如何能用VS去debug librime,查找了很多issue,憾水平有限,目前只能參考md編譯成功。 |
弄了虛擬機,debug出原因所在了。 librime/src/rime/gear/memory.cc Lines 28 to 37 in b74f5fa
在AppendPhrase環節,commit_entry 從Phrase接收了text和code。 帶有custom_code的phrase.entry都傳給了commit_entry.elements。 而在接下來的Save環節,調用了Memorize(commit_entry) librime/src/rime/gear/script_translator.cc Lines 244 to 263 in b74f5fa
ScriptTranslator的Memorize會判斷 elements size, 僅>1的時候,給後續 UpdateEntry傳參的是 含有 custom_code的commit_entry.elements 而當爲1的時候,給後續 UpdateEntry傳參的卻是 commit_entry。L261(不知此處這麼處理是不是爲了規避什麼問題) librime/src/rime/dict/user_dictionary.cc Lines 416 to 422 in b74f5fa
由於我的 commit_entry 既沒有 custom_code,code也爲空(無法像普通模式一樣通過TranslateCodeToString得到code_str) ,導致最終傳入詞典的key沒有編碼部分。 反觀如果是英文詞典,會跳到 TableTranslator的Memorize librime/src/rime/gear/table_translator.cc Lines 309 to 318 in b74f5fa
它則沒有 size的判斷 會給後續 UpdateEntry都傳入 commit_entry.elements。 會包含custom_code,傳給code_str並最終完整的寫入用戶詞典。 看來如果我想按照現行的方式走下去,就只能預先給phrase構造code。但我目前測code的構造,只能靠lua往裏push int值。繼續嘗試看看有無更好的辦法吧。 |
librime-lua 可以查一下 MemoryReg & DictEntryReg & UserDictionaryReg entry = DictEntry()
|
'zhi ma kai men' 要再加上 ' ' 'zhi ma kai men ' |
感謝提醒~💗️ |
有個嚴重bug local M={}
fuction M.init(env)
env.notifier= env.engine.context.commit_notifier:connect( func(ctx) .... end) -- <<
end
function M.fini(env)
env.notifier:disconnect() -- <<<<<<<
end
function M.func(...)
end
return M
|
好的,我試一下。 |
lua 記憶體回收 和 C++ 不同步 ,會發生泄露 lua_compose的 lua_function 在C++中實現 , class lua_processor : public processor {
lua_processor::lua_processor() {
call init()
}
lua_processor::ProcessKeyevent() {
call func()
}
lua_processor::~lua_processor() {
call fini()
}
} |
請教個問題,我嘗試通過lua實現自造詞進入用戶字典功能,寫了一個測試例子
大致途徑是通過構造Phrase,然後轉換成Candidate,然後yield到候選列表裏。
利用Phrase的特性,實現選中候選時,自動保存到用戶字典。
我測試發現,我通過這種方式能寫進英文用戶字典,但始終無法寫進中文字典,想請教下問題可能出自哪裏?是否是table_translator和script_translator在commit時有什麼差異?
The text was updated successfully, but these errors were encountered: