librime icon indicating copy to clipboard operation
librime copied to clipboard

有辦法運行時設定模糊音等拼寫規則嗎?

Open osfans opened this issue 9 years ago • 2 comments

又來問方法了。

有辦法運行時設定模糊音等拼寫規則嗎?

比如通過set_option("ing2in", true),然後就啓用某條規則。 還是只能修改schema.yaml,然後必須重新部署?

osfans avatar Aug 19 '15 01:08 osfans

目前的限制在於,通過拼寫運算求出的「實際輸入碼→ table 內碼」映射表是保存到 prism 文件的,如果有變化,需要生成新的 prism。

曾討論過一個功能:由變量控制啓用、禁用部分拼寫運算規則,以方便用家寫補丁調整模糊音設定,這樣就不必井掉多行代碼了。但也沒法做到以運行時的 option 控制。

暫時還沒系統地想過,用什麼辦法在運行時改變映射;並擊的 combo 到音節的拼寫運算是在運行時做的,但這法兒用在音節表上就不行,speller/algebra 是以輸入→詞典的反方向施行,其結果是一個壓縮了的 trie 樹,用來切分音節。要改他就要把 trie 在內存裏重建,這部分沒現成的代碼,但也不是沒有可能。

只是我還有一個想法,也許對此有幫助。想把統一部署改爲各組件自動管理自己的資源;對設定的修改變得輕量,可以自動地生效。如果 rime::Prism 自己知道需要更新了,就去重建 prism 文件,那就不必在內存裏重建映射表了。

lotem avatar Aug 19 '15 10:08 lotem

又有一些進展。目前只是有個思路…… 可以爲 prism 中的映射加入一些標記,從而實現在運行時過濾一遍匹配出來音節碼。

derive/eng/en/tag=ng2n
derive/ing/in/tag=ng2n

查詢時根據選項過濾匹配的音節:

lookup(input="ken", enabled={ng2n: true}) =
  ["ken", {syllable: "keng", tag: "ng2n"}].filter(function(mapping) {
    return enabled[mapping.tag];
  });

lotem avatar Jun 14 '16 13:06 lotem