McBopomofo
McBopomofo copied to clipboard
[功能問題回報] 如何關閉 emoji 符號的取代
特殊符號替換功能,帶來輸入的困擾。
例如輸入 資料夾
時,會自動變成 📁
,而且選字清單中沒有 資料夾
這個選項,每次輸入這個詞彙都需要手動修改,這對文字寫作帶來極大的困擾。
如何關閉符號替換這個選項? 能否在 Wiki 中添加說明?
這應該是被我搞壞了…。
簡單的修法是先在加詞表格加一段這個
資料夾 ㄗ-ㄌㄧㄠˋ-ㄐㄧㄚˊ
用 "Edit User Phrase" 修改之後存檔。
開票的這位版友要的是「如何關閉 emoji 符號的取代」。 zonble 兄解決了某處具體的問題,但他時間有限。
這個功能我可以做,但首先得等我另外一個 PR 被審核通過,免得 rebase 麻煩。 或者說,我把原理寫在這裡之後,您應該也能做出來。
我先給出一下我的步驟思路:
- data 編譯腳本取消對
Symbols.txt
的處理,且將Symbols.txt
捆包到 McBopomofo.app 內。 - 針對 UserPhrasesLM.h 做處理,新增一個可以被 override 的可傳喚虛擬數值:
class UserPhrasesLM : public Formosa::Gramambular::LanguageModel
{
public:
virtual float valScoreOverride() {
return 0.0;
}
...
- 然後針對 UserPhrasesLM.cpp 做處理,將
g.score = 0.0;
取代為g.score = valScoreOverride();
。 - 新增 EmojiLM.h 專門處理 Symbol.txt,將 score 強行壓到
-100
。正文如下: (這個數值要比 data.txt 裡面的任何數值都低才可以。)
#ifndef EMOJILM_H
#define EMOJILM_H
#include <iostream>
#include <map>
#include <string>
#include "LanguageModel.h"
#include "UserPhrasesLM.h"
namespace McBopomofo {
class EmojiLM: public UserPhrasesLM
{
public:
virtual float valScoreOverride() override {
return -100.0;
}
};
}
#endif
- 在 McBopomofoLM 裡面補上與 EmojiLM 相關的方法。注意在 McBopomofoLM.cpp 內的
return allUnigrams;
上方補入對 EmojiLM 的處理,將 EmojiLM 的內容插入至 AllUnigrams 的末尾。 - 給 Preferences.swift 補上一個 user defaults 開關,專門用來控制「是否開啟 emoji 符號取代」。
- 在 Preferences.xib 內添入一個 checkbox,與上一步添入的開關做綑綁處理。
- LanguageModelManager 同步補上與 EmojiLM 和 Symbol.txt 有關的處理內容(比如 setEmojiEnabled 等)。
- KeyHandler 的
- (instancetype)init
環節內搜尋_languageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);
且在隨後補上一行_languageModel->setEmojiEnabled(Preferences.enableEmojiInput);
。 - InputMethodController 搜尋
// MARK: - Menu Items
這一段,在其下方補上:
@objc func toggleEmojiEnabled(_ sender: Any?) {
LanguageModelManager.setEmojiEnabled(Preferences.toggleEmojiEnabled())
NotifierController.notify(message: String(format: "%@%@%@", NSLocalizedString("Emoji Input Mode", comment: ""), "\n", Preferences.EmojiEnabled ? NSLocalizedString("is Enabled", comment: "") : NSLocalizedString("is Disabled", comment: "")))
}
- 在 Localizable 內將上一步當中引入的 "Emoji Input Mode"、"is Enabled"、"is Disabled" 翻譯成中文。
以上只是大致的思路。
@xareelee 這個功能我已經做完了,您 review 一下之後在這個 PR 內留個言: https://github.com/openvanilla/McBopomofo/pull/303
不好意思我照著上面的步驟在修詞表用 "Edit User Phrase" 修改「資料夾 ㄗ-ㄌㄧㄠˋ-ㄐㄧㄚˊ」後存檔,但還是一樣沒有解決這個問題,請問能夠怎麼讓輸入法讀到最新詞庫嗎? 我也有試過用 "Relod User Phrase"
這個問題似乎已經解決了?
Version 2.5 (1322)