McBopomofo icon indicating copy to clipboard operation
McBopomofo copied to clipboard

[功能問題回報] 如何關閉 emoji 符號的取代

Open xareelee opened this issue 2 years ago • 4 comments

特殊符號替換功能,帶來輸入的困擾。

例如輸入 資料夾 時,會自動變成 📁,而且選字清單中沒有 資料夾 這個選項,每次輸入這個詞彙都需要手動修改,這對文字寫作帶來極大的困擾。

如何關閉符號替換這個選項? 能否在 Wiki 中添加說明?

xareelee avatar Mar 01 '22 05:03 xareelee

這應該是被我搞壞了…。

簡單的修法是先在加詞表格加一段這個

資料夾 ㄗ-ㄌㄧㄠˋ-ㄐㄧㄚˊ

用 "Edit User Phrase" 修改之後存檔。

zonble avatar Mar 01 '22 06:03 zonble

開票的這位版友要的是「如何關閉 emoji 符號的取代」。 zonble 兄解決了某處具體的問題,但他時間有限。

這個功能我可以做,但首先得等我另外一個 PR 被審核通過,免得 rebase 麻煩。 或者說,我把原理寫在這裡之後,您應該也能做出來

我先給出一下我的步驟思路:

  1. data 編譯腳本取消對 Symbols.txt 的處理,且將 Symbols.txt 捆包到 McBopomofo.app 內。
  2. 針對 UserPhrasesLM.h 做處理,新增一個可以被 override 的可傳喚虛擬數值:
class UserPhrasesLM : public Formosa::Gramambular::LanguageModel
{
public:
    virtual float valScoreOverride() {
        return 0.0;
    }
...
  1. 然後針對 UserPhrasesLM.cpp 做處理,將g.score = 0.0;取代為g.score = valScoreOverride();
  2. 新增 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
  1. 在 McBopomofoLM 裡面補上與 EmojiLM 相關的方法。注意在 McBopomofoLM.cpp 內的return allUnigrams;上方補入對 EmojiLM 的處理,將 EmojiLM 的內容插入至 AllUnigrams 的末尾。
  2. 給 Preferences.swift 補上一個 user defaults 開關,專門用來控制「是否開啟 emoji 符號取代」。
  3. 在 Preferences.xib 內添入一個 checkbox,與上一步添入的開關做綑綁處理。
  4. LanguageModelManager 同步補上與 EmojiLM 和 Symbol.txt 有關的處理內容(比如 setEmojiEnabled 等)。
  5. KeyHandler 的- (instancetype)init環節內搜尋 _languageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);且在隨後補上一行 _languageModel->setEmojiEnabled(Preferences.enableEmojiInput);
  6. 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: "")))
    }
  1. 在 Localizable 內將上一步當中引入的 "Emoji Input Mode"、"is Enabled"、"is Disabled" 翻譯成中文。

以上只是大致的思路。

ghost avatar Mar 06 '22 09:03 ghost

@xareelee 這個功能我已經做完了,您 review 一下之後在這個 PR 內留個言: https://github.com/openvanilla/McBopomofo/pull/303

ghost avatar Mar 06 '22 12:03 ghost

不好意思我照著上面的步驟在修詞表用 "Edit User Phrase" 修改「資料夾 ㄗ-ㄌㄧㄠˋ-ㄐㄧㄚˊ」後存檔,但還是一樣沒有解決這個問題,請問能夠怎麼讓輸入法讀到最新詞庫嗎? 我也有試過用 "Relod User Phrase"

larryjclai avatar Aug 03 '22 03:08 larryjclai

這個問題似乎已經解決了?

Screenshot 2023-11-22 at 11 57 00 AM

Version 2.5 (1322)

shuang886 avatar Nov 22 '23 19:11 shuang886