更新履歷 - ShikiSuen/vChewing-macOS Wiki

1.7.2

  • 功能:從本次更新開始,使用者半衰記憶模組回歸、且相比上游的 C++ 半衰記憶模組而言新增下述功能。該模組不會在逐字選字模式下起作用。
    1. 半衰記憶模組在提供建議時,不再僅告知權重最大的那個候選字詞,而是直接回饋一個單元圖陣列。因應該特性更新,威注音實現了一個新功能:將被半衰記憶模組記住的內容在選字窗內的排序提前。
    2. 半衰記憶模組不會記憶那種只有單個漢字長度的單元圖(「你他妳她祢她它牠再在」這幾個字除外),以免破壞敲字選字體驗。換言之,想讓單個漢字被記憶的話,在選字時、這個字的(在敲字順序意義上的)後方必須有至少一個字詞、才符合半衰記憶模組內部的觀察條件(不然就不會生成索引鍵值,自然也就不會被觀察)。如果仍有體驗上的不足的話,輸入法選單內會有現成的選項、來允許移除目前半衰記憶模組資料內的單元圖(預設情況下會同時記憶單元圖、雙元圖、三元圖)。
    3. 半衰記憶模組資料會在每次敲字的手動選字行為發生時以 JSON 格式記入至使用者語彙資料目錄下的「override-model-data-chs/cht.dat」內。雖可明文編輯,但編輯後果自負:因為可能會編輯出故障來。
    4. 當使用者語彙資料架內出現任何內容變動的時候,都會重新載入半衰記憶模組的內容。
    5. 半衰記憶模組會在觀測時確保辭典內的資料順序按照最後編輯順序做新舊排列(詳見源碼內文註解)。
    6. 半衰模組對輸入時的自動選字以及選字窗的內容排序的影響可以在偏好設定的辭典選項內藉由對應的勾選項來停用(打勾則為啟用),但半衰模組仍會持續運作。
  • 功能:當新酷音的 symbols.dat 被放入威注音的使用者語彙資料夾內的話,威注音的波浪符號鍵選單會轉而讀取這個檔案來作為波浪符號鍵選單的內容。這樣一來,使用者就可以自訂波浪符號選單的內容。目前先不對此做「簡體中文/繁體中文模式區分不同的 symbols.dat 檔案」的設計,因為功能實在太小眾,且:如果引入了該設計的話,反而會麻煩使用者給檔案重新命名。再加上威注音原本的波浪符號鍵選單的內容本來就很豐富。
  • 功能:選字窗內顯示的漢字現在會受到康熙漢字轉換模式/JIS漢字轉換模式的影響,但會像中州韻系列輸入法那樣在有轉換過的候選字旁以括弧顯示轉換前的漢字。
  • 功能:在切換康熙漢字轉換模式/JIS漢字轉換模式開關時,行為改為:先將組字區的內容自動遞交,再切換開關。這樣可以保證自動遞交出去的內容為「切換開關操作之前」的結果。
  • 語料:例行語彙資料更新,且全字庫內容更新已確認為與 2022 年 06 月 15 日的版本一致。
  • 研發:現在,將 KeyHandler 副本重設的時候,都會先藉由對應的狀態調度函式來遞交當前狀態可能持有的組字緩衝區內容資料。
  • 研發:將共用的全字庫資料模組與原廠的繪文字模組改為在 LMInstantiator 當中的靜態副本,又節約了 20MB 的記憶體。
  • 研發:修正 LMCoreEX 在載入且處理 txt 格式的語彙資料時(在某些情況下)無法正確處理每行開頭出現的「#」符號之情形的問題。
  • 研發:對 LMConsolidator 模組(以及其在使用者語彙編輯器內的近親)某些處理細節做了小規模調整。
  • 研發:將 mgrLangModel 內的對資料路徑的處理格式由 String 改為 URL,因為 String 在轉換至 URL 時還需要做對轉換失敗的例外狀況的處理、而 URL 可無損轉換至 string path。
  • 研發:天權星組字引擎升級至 v1.2.6,同步加入了來自以 C# 編寫的天權星NT引擎的近期更新(包括某些要被這次更新了的半衰記憶模組用到的功能)。受益於 IntelliJ Rider 和 Visual Studio 2022 對 C# 的優秀的程式流程優化建議功能(Inspect),很多在 Swift 版天權星引擎編寫時沒能做到的程式流程優化得以在 C# 版本的天權星引擎內完成、且反哺回 Swift 版的天權星引擎。本次更新還引入了語言模組協定功能(也就是 Swift 的 protocol、C# 的 interface 介面協定)。C# 版本做這個設計主要是因為 C# 不可以同時繼承自兩個型別(但可以繼承自兩個介面協定)。Swift 用 protocol 其實也更適合,只是並非剛需而已。同期的鐵恨注拼引擎更新至 v1.1.7 版,但只是 documentation 更新+隨 C# 版刷版本號而已(C# 版鐵恨NT引擎倒是有自己的更新就是了)。
  • 研發:新增了用以判斷「不需要處理候選字輪替行為」的一個條件:當組字器為空、或者「爬過的節錨」的陣列是空的時候,不處理。

1.7.1

  • 行為:組字區內現可直接看到康熙字轉換 / JIS 漢字轉換的結果。
  • 行為:由於 Facebook 在 FireFox / Chrome 瀏覽器當中會綁架 Tab 鍵、使得任何輸入法對 Tab 鍵均無法完全攔截的緣故,威注音允許使用 Shift(+Command)+Space 直接就地輪替候選字。
  • 研發:考慮到 IMK 預設的滑鼠點擊行為會導致組字區內容在遞交的時候被跳過某些原本藉由 ctlInputMethod.commit() 該做的處理,所以分別在 KeyHandler.buildInputtingState() 與 InputState 內分別補齊了相關處理:前者過濾掉無法列印的 ASCII 字元,後者負責康熙字 / JIS 漢字轉換。
  • 研發:InputState、KeyHandler、LMInstantiator、ctlInputMethod 的 documentation 用漢語完全重寫。
  • 研發:KeyHandler 現在會對超過特定範圍之外的節點內容自動標記為「有手動選字過」,這樣會減輕每次爬軌時的運算壓力。此外,KeyHandler 還對 actualCandidateCursorIndex 的計算方法做了簡化。
  • 研發:修正了 InputState 內某些需要對內部參數做 didSet 的子型別沒有在初期化時執行 didSet 的問題。
  • 研發:KeyHandler 簡化了所有成員變數的命名與處理,特別是對 inputMode 成員變數的處理做了簡化。
  • 研發:ctlInputMethod 內部所有對 client 的類型判斷全都撤掉、換成了 IMK 內建的 client() 函數。原因:這個函數出來的內容類型一定會是 IMKTextInput,不需要再做類型判斷。此外,ctlInputMethod 還有一些與條件判斷有關的格式簡化。
  • 研發:鐵恨注拼引擎更新至 1.1.6,修正了 Phonabet 注音符號物件「在自清的時候不自動重設自身類型」的問題。此外也將倚天排列的英文命名由「Eten」訂正為「ETen」。另:鐵恨引擎現有 C++ 版與 C# 版可用、詳情請洽 Gitee 的「vChewing/TekkonCC」與「vChewing/TekkonNT」這兩個倉庫。
  • 研發:天權星組字引擎更新至 1.2.1,僅就程式維護角度優化了個別方法、且做了一些術語命名調整。另:天權星引擎現有 C# 版可用、詳情請洽 Gitee 的「vChewing/MegrezNT」倉庫。
  • 研發:嘗試將半衰記憶引擎內的某些 struct 改用 class,仍無效果。故繼續保持其停用狀態。

1.7.0 SP2

  • [SP2] 新增新加坡漢語常用詞語。
  • [SP1] 修正了 1.7.0 Golden Master 在給選字窗新增頁碼支援時不慎引入的(初期階段)空指針。該問題在 macOS 12.x 系統下不會爆發,但會在 macOS 10.x 全線系統下引發 Corpse_Notify 問題、導致接受 IMK 文字輸入行為的應用也跟著崩潰。
  • 鐵恨引擎更新至 1.1.5,糾正了許氏鍵盤排列敲「v」時在組字緩衝區內的注音符號顯示類型錯誤。
  • 採用了更智能的方法來判斷橫排選字窗是否有必要縱排顯示:如果當前頁面的所有候選字的字符總數加起來超過每頁候選字詞數量上限的 180% 的話,則強制使用縱排選字窗。因應此番修改,波浪符號選單在載入二級選單時,會先利用空狀態來消除之前的選字窗,以防止橫排選字窗與縱排選字窗同時出現在螢幕上。
  • 解決了源自上游的「當組字區內有繪文字時,選字長度上限與下限判斷會失誤」的問題。方法是:對 InputState 的語意標記範圍(literalMarkedRange)的判斷流程做了簡化,且擴大了對該範圍變數的應用範圍。
  • 針對「讀音數與字符數不一致」的情況重新補回了工具提示文本。
  • 移除了(來自上游的)橫排輸入文字時的縱排選字窗的「不該有的起始座標偏移」。現在 ctlInputMethod 的 show() 函數會對「是否使用縱排選字窗」與「是否縱排輸入文字」分別判斷、據此決定選字窗的起始座標點。
  • 糾正了 SwiftUI 版偏好設定當中「在選字窗內顯示翻頁按鈕」的勾選項無法生效的問題。
  • 選字窗現會在右側顯示當前的頁面編號。
  • 在偏好設定內新增了一個選項,允許使用者對單個漢字的候選字詞升頻或排除。該功能不預設開啟,是因為考慮到該功能可能會導致單個漢字「頻率過高」打斷自動選詞的危險。如果真出現這種危險情況的話,編輯使用者語彙檔案、將相關的行記錄移除即可。威注音反而鼓勵使用者們就常用漢字的排序提出調整建議(當且僅當某些常用漢字不在前十八個候選字內的情況下)。
  • 移除了威注音 1.6.3 SP1 的修改、將天權星引擎降級至 1.1.8,據此解決了被這些修改引入的比如「敲『蜜蜂』選繪文字之後、只有最後一個字變成繪文字」這樣的問題。天權星引擎的下一個版本直接從 1.2.0 開始。也就是說,本次威注音 1.7.0 的 codebase 是在威注音 1.6.3 Golden Master 的基礎上完成的。

-- 以下更新日誌僅供二次研發人員閱讀 --

  • [SP2] 研發:調整詞庫編譯方式為:先編譯腳本為二進位可執行檔案、再用這個可執行檔案編譯詞庫。
  • [SP2] 研發:將 data 這個 Xcode 建置目標移除。對詞庫編譯的步驟被挪至 vChewing 本體的 build phrases 的開頭、以 build phrase script 的形式來實現。
  • [SP1] 研發:將音效引擎處理方法由 NSSound 更換為 AVFoundation。
  • [SP1] 研發:徹底禁用了 LMUserOverride,因為實在沒有什麼辦法可以使其正常工作。
  • 研發:將 ctlCandidateHorizontal 與 ctlCandidateVertical 合併為一個型別「ctlCandidateUniversal」。圖時,將 useVerticalMode / isVerticalMode 更名為 isTypingVertical / isVerticalTyping,防止與「選字窗是否縱排」混淆。
  • 研發:翻修 NSStringUtils、使其變成 StringUtils,對其與 InputState 及相關部位的所有對 NSString 和 NSRange 的用法均更換為 Swift 原生的 String 與 Range 用法(與 InputMethodKit 對接的用來繪製 Marking State 下畫線的部分除外)。然而,這些內容變更之處全部使用了 Swift 內建的 .utf16 處理,以確保之前上游專案對諸如繪文字與全字庫文字的相容性處理得以繼續正常工作。此外,倉庫內還有少許其他翻修、盡量使用 Swift 專有的處理習慣。
  • 研發:將用到 UInt 的部分盡可能全都換成 Int,且做了數值防呆處理。原因:UInt() 函數吃了負數的話仍舊會出現運行階段錯誤。該做的數值防呆處理必須得做,不是用 UInt() 就可以省事的(反而徒增不必要的類型轉換)。
  • 研發:將某些 NSString 類型才有的用法移植給 Swift 的 String 類型(也就是自己寫了語法糖)。
  • 研發:將對文字提示標記的配色方案變更用的程式碼由 InputState 挪至 TooltipController、使用統一的函數來管理。

1.6.3

  • 現允許停用任何與各種輸入模式切換功能綁定的鍵盤熱鍵開關。詳情請洽「偏好設定→鍵盤→鍵盤快速鍵」。因為 macOS 系統的 UserDefaults 管理特性的原因,做出這種修改之後需要一秒左右才能生效。
  • 現允許使用「Ctrl+Alt+逗號/句號」按鍵來迅速輸入雙書名號「《》」。其實本來摁「Shift+|」也可以輸入的。另外,因為技術障礙的原因,「Shift+Alt+逗號/句號」按鍵無法用來輸入標點符號。至於 macOS 內建的輸入法為什麼可以做到這一點,竊以為很可能是因為使用了 Apple 的非公開 API 所致。
  • 現允許使用者藉由偏好設定介面調整輸入法組字緩衝區的最大容量(最小為 10 字,最大為 40 字)。註:超過四十字的組字緩衝區只會帶來更負面的意義:「更麻煩的就地編輯」、「對 CPU 算力的佔用導致的輸入法響應遲鈍」,等。
  • 天權星引擎更新至 v1.1.8 版,對內建的所有函數當中的 int 型參數均做了防呆設計,也新增了來自上游的獲取「當前游標位置開頭的可用候選字」的功能。此外,對殊途同歸的爬軌節點路徑僅取用最優解。因應此次更新,偏好設定內移除了與平衡權重有關的選項。
  • 選字行為:移除了 Windows 雅虎奇摩式游標選字風格,且補回了真正的微軟新注音式游標選字風格。
  • 按鍵行為:現在,當 (Shift+)Tab 鍵的輪替對象被設定為候選字(而非候選字窗的頁面)時,敲字時直接摁 (Shift+)Tab 會就地輪替候選字、而不出現選字窗。此時如果手動叫出選字窗的話,(Shift+)Tab 會像之前那樣在選字窗內輪替漢字。該設定不會在啟用逐字選字輸入模式時妨礙使用者輸入 Tab 縮進。
  • 鐵恨引擎更新至 v1.1.4 版,針對許氏排列新增了對「ㄛˊ」「ㄛˋ」「ㄛˇ」「ㄛ˙」「ㄛ 」的輸入支援。// 實際上,原廠辭典內對應的音只有「ㄛˊ」「ㄛˋ」「ㄛ 」這三個。
  • 選字窗:現在會在翻頁到尾/到頭之後再翻頁時出現提醒音效,但仍會像奇摩輸入法那樣繼續翻過去。
  • 選字窗:邊框色有所調整,避免造成視覺干擾。
  • 選字窗:修正了縱排選字窗的右側邊框過粗的問題。
  • 音效引擎:解決了連續蜂鳴/放屁時因為上一次發聲突然被切斷而導致的爆音問題。相關行為更正為「先淡出、再切斷」。
  • 偵錯:在啟用偵錯模式時,輸入法會在「/private/var/tmp/」資料夾下生成可供 GraphViz 讀取的 dot 檔案。
  • 例行原廠語料庫更新。另:此次對語料庫倉庫做了一些更新,可以迅速在 Linux 系統下針對位於「/usr/share/libchewing/」的新酷音輸入法語料檔案目錄編譯且部署對應格式的威注音詞庫。生成的 dat 詞庫檔案套裝也可用於 Windows 版新酷音。如果要想在 Windows 系統下編譯的話,請安裝 WSL 版的 Ubuntu / Debian 來編譯。威注音輸入法暫無研發 Windows 與 Linux 版的確定計畫,因為目前找不到可以將 Swift 與 FCITX5 攜同工作的方法。

1.6.2

  • 緊急修正了天權星引擎 v1.1.1 版引入的一處故障。現在,威注音輸入法不會再出現之前威注音 1.6.0-1.6.1 版當中的「新輸入的低頻詞綁架高頻詞」的情況。
  • 例行詞語更新。

1.6.1

  • 提速:更換原廠詞庫格式為 plist,於是在每次開機之後首次啟動輸入法、或是手動重新啟動輸入法之後的等待時間縮短至約一秒。該提速對 2011-2015 年的 mac 機種也有效。// 註:之前 1.5.5 版引入的算法雖然在近五年來的 mac 機種內可以快速載入,但在 2011-2015 年間內的機種的 CPU 因為缺少某些硬體運算特性等緣故、只能進行軟運算、在執行同樣的運算時要耗費十幾甚至幾十倍的時間。這也就是威注音 1.5.5-1.6.0 版在 2011 年的機種上每個簡繁模式需要十七秒鐘的時間來載入且解析核心資料的緣故(2018 年的 mac mini 的話,約一秒鐘就可以載入且解析完畢)。Plist 可以直接提供解析好的 Swift 辭典陣列,所以免去了解析的時間。
  • 體驗:更換輸入法內建蜂鳴等音效為重新設計過的高傳真音效,且對響度做了標準化處理。現在的蜂鳴音效不會對使用者的情緒構成負面影響。
  • 體驗:允許在偏好設定內啟用或停用「按候選字詞的長度調整權重」的功能(預設情況下不會啟用),且天權星引擎做了與此有關的小調整、使其權重調整行為不至於過猛。
  • 音韻:鐵恨引擎新增對「ㄅㄧㄤ」與「ㄉㄨㄤ」的拼音支援。
  • 語料:例行原廠詞語資料更新。

1.6.0

  • 糾正了幾處與 IMK 有關的互動行為,使得威注音在很多常見情況下避免出現幽靈組字區。
  • 重新啟用了之前被暫時禁用的酷音波浪鍵符號選單、且使其在 Word 與包括 macOS 內建終端機在內的各種終端機應用內得以正常使用。
    • 感謝火山五筆輸入法作者 Qwertyyb 指點迷津。
  • 將要 Swift 特有的一些做法套用至 KeyHandler 等模組內的一些函式。同時,InputHandler 更名為 InputSignal、改為 Struct 型別。也還糾正了一些變數名稱的拼寫錯誤。
  • 在輸入法遞交內容時,不會再放行任何可能的 ASCII 不可列印字元。
  • 全字庫檔案更新至 2022 年 04 月 27 日的版本。另附例行語彙更新。
  • 糾正了之前威注音 1.5.8 版引入的「選字選中了 Emoji 之後、游標錯位」的問題。

1.5.9

  • 功能更新:鐵恨注音並擊引擎更新至 v1.1.0 版,使得威注音得以重新開始支援「漢語拼音」輸入。此外,威注音也新增了對「國音二式」「耶魯拼音」「華羅拼音」「通用拼音」的輸入支援。這五種拼音方案的輸入均需要使用數字鍵來標調,但鐵恨引擎對大千排列的調號(數字鍵 6、7 號鍵)也做了相容性支援。另外,鐵恨引擎不支援簡拼輸入,且要求完整輸入所有拼音注音字母與聲調。對搜狗風格的簡拼輸入有需求者,請洽鼠鬚管等他廠輸入法。
  • 功能更新:SwiftUI 版偏好設定視窗的鍵盤頁面新增了兩個快速設定用的按鈕,方便在注音與拼音輸入模式之間迅速切換。此外,注音排列與鍵盤佈局的選項新增了一些防呆設計。這兩個新功能乃 SwiftUI 版偏好設定視窗限定功能、無法在 macOS 10.x 系統內使用,但不妨礙您對注音排列與鍵盤佈局進行配置。
  • 錯誤更正:修正了 KeyHandler 在敲空格鍵且注拼槽沒有聲調時沒能往注拼槽傳送陰平聲調訊號的問題。
  • 錯誤修正:此次對鐵恨注音並擊引擎進行更新時,對倚天忘形與許氏佈局做了徹底的檢查修補,至少按照順序敲注音是可以敲的。此外,這次的檢查也發現了倚天忘形與許氏佈局的侷限:某些語氣詞用音在原理上無法藉由這兩個鍵盤佈局輸入。希望這個測試結果能為注音輸入法的初學者們敲響警鐘、讓他們意識到只有傳統大千聲韻並擊才是出路。
  • 錯誤修正:換回了最開始使用的對重複候選字的篩除方法。
  • 研發:藉由 DispatchQueue 加速了輸入法在每次開機首次啟動時對全字庫內容的載入速度。
  • 研發:天權星語彙引擎更新至 v1.1.0 版,詳見其更新日誌。此次引擎更新對威注音輸入法的使用體驗尚無值得一提的改動。
  • 研發:ctlInputMethod 的 handle(event:client:) 函數經過小幅重構,應該不會再傳送垃圾訊號給 KeyHandler 了。
  • 研發:使用者半衰記憶模組經過一些小修改,現在可以正常生成 key、正常觀測了,但仍舊無法給出可用的選字建議。該功能繼續封存,直至徹底修好之後再對使用者開放。
  • 例行語彙更新。

1.5.8

  • 修正了自威注音 v1.5.1 版引入的對 Delete 鍵的回呼狀態判定條件錯誤。現在摁 Delete 鍵對組字區進行編輯操作時不會再出現幽靈組字區。
  • 天權星語彙引擎升級至 v1.0.9,解決了在對 walk 過的 builder 插入 reading 時「expandGridByOneAt()」內的條件判定錯誤導致的 builder 內容錯亂的問題。
  • 因為天權星引擎的升級,所以解決了威注音 v1.5.4 版以來在編輯組字區中心區域的文字時會發生的組字區錯亂的問題。
  • 鐵恨注音並擊處理引擎升級至 v1.0.5,改良了對複合型注音排列的邏輯處理步驟、以試圖規避一些可能存在的問題。然而,因為威注音專案的研發團隊內無人懂得如何使用倚天忘形26鍵與許氏國音排列的緣故,這兩個複合型注音排列的測試自然也無法完成、只能靠推算。歡迎熱心人士們來測試。如果發現有問題的話,請以詳細描述在威注音的 GitHub 或 Gitee 倉庫開工單。
  • 因為鐵恨引擎的升級,威注音輸入法得以新增兩個模式:「拼音並擊模式」與「可以自選用 Ctrl(+Alt)+CMD+Enter 輸出注音文還是拼音文」。對於後者而言,如果是摁了 Alt 的話,輸出的 W3C Ruby 注音文標注與拼音文標注均會按照兩岸各自的教科書格式來顯示(除非網頁字型對這種漢語拼音支援欠佳)。// 註:注音文的教科書寫法是要把輕聲記號寫在注音的背後(也就是左側)。
  • 因為 Delete 鍵幽靈組字區的問題和天權星引擎的組字區錯亂問題均得到解決的緣故,這次更新重新啟用了「reverseWalk()」反爬函數的進階功能:只反爬最近三個節點,且啟用「span 越長、權重越大」的平衡權重。

1.5.7

  • 更換注音並擊引擎為鐵恨引擎。至此,威注音專案已移除全部的 Lukhnos Liu 的 C++ 源碼成分。
  • 移除了漢語拼音輸入支援(因鐵恨注音並擊引擎尚未支援漢語拼音輸入)。回頭能實現這個功能的話就再將這個功能補回來。
  • 修正了偽精業鍵盤 Ukelele 佈局檔案內的一處映射錯誤。
  • 停用了讓天權星引擎只爬附近幾個節點的設計。
  • 少許詞彙更新。

1.5.6

  • Megrez 天權星引擎升級至 1.0.7 版,對 reverseWalk() 做了功能拓展。現在,span 跨度越長,權重越大。如果有誰要改這款輸入法的話,還可以用 reverseWalk() 新增的選填參數「nodesLimit」限定要 reverseWalk 的節點數量範圍。
  • 在所有語言模組型別內以 .split() 取代之前的 .components(),將簡體中文/繁體中文核心語料庫的單獨載入時間由四秒縮短至一秒、且輸入法峰值記憶體佔用從 115MB 下降至 74MB 左右。如果只是使用簡體中文或繁體中文某個單一的模式的話,輸入法記憶體佔用約為 40MB 左右。
  • 優化了使用者語言編輯器與 LMConsolidator 自動檔案格式整理模組內的處理工序。
  • 更改了 LMInstantiator 在獲取且整理 Unigram 陣列時對重複內容的清理步驟。
  • 例行語彙資料更新。

1.5.5

  • 新功能:允許使用者在敲字時摁 Ctrl+Alt+Command+Enter 直接輸出 W3C 標準的 HTML Ruby 漢字注音標示。
  • 修正了 F1-F20、PrtSc、Insert 等按鍵「會導致輸入法崩潰」的問題:
    • 針對純 Swift 版 KeyHandler 與天權星引擎對某些不合法的 charCode 拒絕處理、導致的輸入法崩潰的情況,這次更新修改了 InputHandler 對按鍵訊號的處理,僅允許且接受 ANSI 按鍵訊號、以及除此之外在白名單內的 KeyCode 訊號。對其餘 KeyCode 與 charCode 一律做出指定的錯誤回呼(ErrorCallback),防止那些可能會引起故障的 charCode 訊號被送交給天權星引擎。
  • 記憶體佔用峰值由 200MB 左右降至 114MB 左右:
    • 引入了 Isaac Xen 的 StringView Ranges Extension 功能拓展,藉此完成了 LMCoreEX 這個萬用免析型別、以作為上游 ParselessLM 免析語言模組的繼任者。與此同時,LMAssociates 與 LMUserPhrases 也都做了免析處理升級。這些升級工作使威注音輸入法的記憶體佔用由約 200MB 降至約 114MB。由於 LMCoreEX 接管了 LMCore 與 LMLite 的全部工作,故淘汰 LMCore 與 LMLite。另外,為了防止程式出錯,LMCoreEX 會自動給讀到的大於 0 的權重數值乘以 -1。
  • 從這一版開始,在藉由敲「顏文字」三個字來輸入顏文字時,選字窗會強制使用縱排顯示、以應對之前橫排選字窗寬到溢出螢幕邊緣的常見現象。
  • 修正了 SwiftUI 版偏好設定介面內的辭典介面內的「CNS」「繪文字」兩處勾選項目不當場生效的問題。
  • 棄用了所有與語言模組載入有關的 DispatchQueue 處理,以規避一些會導致輸入法不斷崩潰的運行階段錯誤。
  • 修正了所有語言模組型別當中在讀取檔案過程出錯時的錯誤報告訊息內容及格式。
  • 稍微降低了在詞語編譯時對統計次數為 0 的詞語施加的預設權重。
  • 研發:調整了 LMInstantiator 內的各種函數的命名、以遵循目前的各個語言模型副本的命名體系。
  • 研發:同步了來自上游(UPR315)的對注音調號輸入行為的修改。雖有仔細檢閱過這次的修改內容同步情況,然而:論及這次修改對威注音造成的可能的行為變化,威注音不保證其與上游 PR 描述完全一致、也不對上游的 PR 的英文正文描述內容負責。

1.5.4

  • 輸入法的語言處理引擎由 Gramambular 更換為使用 Swift 語言編寫的 Megrez 天權星引擎。
  • 語言模型管理器型別(mgrLangModel)內用以寫入使用者自訂語彙的函數現可應對「正要寫入使用者自訂語彙時,檔案的結尾標記是壞掉的」的情況。
  • 核心語言模組資料現在會按照簡繁體中文模式分別載入至記憶體。
  • 在核心語言模組開始讀入與完成讀入時,會在螢幕右上角出現提示。
  • 精簡了 LMInstantiator 生成要傳回的 Unigrams 陣列時的處理步驟。
  • 新增了部分與台澎金馬的鐵路站點有關的詞語資料。
幾處退步項目(Regression):
  • 因為輸入法語言處理引擎的更換、且使用額外的 ObjC++ 型別來封裝 Mandarin 注音拼寫處理引擎,所以 KeyHander 與 mgrLangModel 均徹底 Swift 化。配套的語言模型處理用型別也全都重寫了。這本來應該是進步項目,但因為目前尚無在 Swift 重現之前 ParselessLM 載入速度的手段,所以會在輸入法每次開啟或重啟時均耗費幾秒鐘、來讀取核心語言模組資料。之後,輸入法會常駐記憶體內,每次要敲字就不會再重新讀取核心語言模組資料了。
  • 出於同樣的原因,輸入法的記憶體佔用由 15MB 上漲到 170-200MB 左右。但如果您只用簡體中文或繁體中文輸入模式的話,則記憶體佔用會出現對應的減少。經過測試,這個負面特性並不會對正品 Mac 電腦構成耗電方面的影響,但 Hackintosh 筆電可能會受到影響(因機器而異)。幸運的是,輸入法的反應速度更快了。
  • 從這個版本開始,半衰模組功能暫時從威注音缺席。一是因為用 Swift 重寫之後發現完全沒效果、也不知道該怎麼寫單元測試來找出毛病,二是因為這個功能會給某些使用者帶來額外的困擾:比如說剛剛用 SHIFT+方向鍵選字後摁 Enter 就地新添入的使用者語彙可能會因為半衰模組的殘存記憶而無法立刻生效,等。雖然重啟一下輸入法就好,但還是會很麻煩。回頭等半衰模組功能修好之後,威注音會考慮在每次就地新增使用者語彙的時候重設半衰模組的內容。

1.5.3

  • 依照來自 Mobile01 社群之反饋,集中調整了一些原廠語彙庫的內容及頻率。
  • 規範了對游標前置與後置模式的英文稱謂及相關函數命名、以免令使用者與研發參與者們產生困惑。注意:本次更新恐需使用者重新配置對游標前置與後置模式的偏好設定(但原廠預設行為沒有變化)。
  • 訂正了從上游繼承來的對游標選字模式的錯誤描述。現不再使用「漢音風格」「微軟新注音風格」來描述游標前置模式與游標後置模式,轉而改用更準確的稱謂:「macOS 內建注音風格」與「Windows 版奇摩輸入法風格」。原因:漢音輸入法 Windows 版僅支援游標後置模式、且微軟新注音輸入法不允許游標在詞的中間時呼叫該詞音的候選字(雅虎注音、小麥注音、自然輸入法等某人參與過的案子都有這個 Bug,而微軟新注音、新酷音、macOS 內建注音都沒有這個 Bug)。詳情請洽本專案的 GitHub Issue #67 。
  • 將威注音 1.5.2 版當中針對游標前置模式的一處行為修正方式改為上游原廠 Gramambular 內的某個備用函數(僅在游標前置模式啟用時才會使用)。
  • 糾正了威注音 1.5.2 版引入的一處行為倒退:在套用了對游標前置模式的修正的情況下,當游標在組字區最尾端的時候,現在又可以給最尾端的候選詞另選詞了(而不是只針對最尾端的候選字):這是小麥上游的一個比較有用的功能特性,彌補了游標前置模式相對於游標後置模式而言的唯一不足。
  • 簡化了某處一般情況下用不上的工具提示,以杜絕可能存在的用語混淆。

1.5.2

  • 藉由修改 Grid.h 這個檔案,解決了源自上游引擎的「當啟用漢音風格游標前置模式時,游標在詞語中間也會叫出候選字」的 Bug。本次修正之後,比方說:您組字區內敲「提供像是」這個詞組、且游標在「供」與「像」之間時叫出選字窗的話,候選字清單內不會再出現「公象」了。這樣一來,在行為上就與 macOS 內建注音以及 macOS 版奇摩輸入法完全一致。
  • 使用者語彙編輯器的視窗的預設尺寸與最小尺寸擴增至 640x480。
  • 僅簡體中文與繁體中文語系介面的三處用語調整:「配列」→「排列」,「不要放屁」→「廉恥模式」,「康熙字」→「康熙正字」。
  • 將 KeyHandler 剩餘的某個實際上可以 Swift 化的 InputState 回傳函數用 Swift 重寫。至此,所有與 InputState 回傳有關的功能函數全部由 Swift 接管、徹底消滅了 KeyHandler ObjC 程式部分的「expected a type」的問題。
  • 將 KeyHandler 的所有 Swift 化的函數的命名按照 Swift 的函數命名習慣做了統一調整。
  • 移除了 KeyHandler Swift 部分程式庫內的「!as」強制拆包的使用、改用「if let as?」這樣的 Swift 安全句法。
  • 仍舊是 KeyHandler:趁這次重寫時,針對「buildAssociatePhraseStateWithKey」這個(用以生成帶有聯想詞候選清單的結果的狀態回呼的)函數進行了小幅度的重構處理,使其始終可以從 ObjC 部分的「buildAssociatePhraseArray」函數獲取到一個內容類型為「String」的標準 Swift 數組。這樣一來,該聯想詞狀態回呼函數將始終能夠傳回正確的結果形態、永遠也無法傳回 nil。於是,所有在用到該函數時以回傳結果類型判斷作為合法性判斷依據的函數,全都將依據改為檢查傳回的數組是否為空:如果數組為空的話,直接回呼一個空狀態。

1.5.1

  • 用 Swift 重寫了 KeyHandler 所有能重寫的部分(約 80% 左右),順手解決了該模組內被 Objective-C++ 隱蔽的全部的類型安全問題,藉此換取了更快的輸入法響應速度、與更舒適的程式專案維護體驗。
  • 調整了使用者語彙編輯器的預設字號大小,使其更易於閱讀。
  • 新增隱藏功能:允許使用者在開啟調試模式的情況下「摁著 Alt 鍵點輸入法的對應選單項目」以同時開啟簡繁體雙模式的使用者語彙檔案。除此之外的場合,只會開啟當前簡/繁體模式對應的使用者語彙檔案。
  • 解決了「在手動重新啟動輸入法之後,輸入法不尊重當前簡繁輸入模式(尤其是簡體中文輸入模式)」的問題。
  • 解決了「重新啟動輸入法之前正在輸入的應用程式的光標仍在,重啟輸入法之後立刻接著輸入時、首個文字輸入會失敗」的問題。

備註:

  • 上述兩個問題的解決思路在於:首先讓輸入法記住自己在手動重啟或者意外關閉之前所用的簡繁輸入模式,其次就是每次手動重啟的那一刻由輸入法本體來搶一次輸入焦點。這樣可以迫使當前正在接受文字輸入的應用程式重新執行輸入法的 activateServer 與 setValue 的操作。

  • 除此之外就是 KeyHandler 的 Swift 化。原理在於:先用 Objective-C 將 C++ 處理都包裹起來、封裝成 Swift 可以直接用的各種動態過程函數,然後以 handleInput 這個函數入手、來逐漸蠶食重寫。結果就是輸入法的編譯速度與操作反應速度都變快了:因為程式不需要去猜物件類型,這就節省了很多運算資源。比方說藉由 Objective-C 回傳的所有 NSArray,裡面的資料類型也都是明確指定了的。 Objective-C 猜類型時浪費的時間,使得 C++ 相對 Swift 的速度優勢完全無法發揮。整個 KeyHandler 的確無法僅使用 Swift 完成,但 Objective-C(++) 的使用要盡可能減少、盡可能僅用作 C++ 過程的包裝工具、盡可能不要出現任何需要猜類型的情況(特別是數組內的數據類型得明確指定)、盡可能僅使用 Cocoa 內建的 NS 物件類型,這樣速度最快、也最容易談安全性。

1.5.0

  • 輸入法:從這一版開始,當輸入法本身的視窗(偏好設定或者關於視窗等)重新成為當前操作視窗的那一刻,輸入法不再在那裡轉風火輪。
  • 偏好設定:如果當前輸入法在 macOS 11.0 開始的 macOS 系統下運作的話,直接藉由輸入法選單點開的偏好設定會是使用 SwiftUI 製作的新版偏好設定介面。同時,摁 Alt 點開輸入法選單、再點開偏好設定的話,可以叫出迄今為止的舊版偏好設定介面。整個 macOS 10.x 系統內只會出現舊版偏好設定介面。
  • 使用者語彙:解決了舊版偏好設定視窗在選擇使用者語彙資料夾時「沒能對目前選中的目錄正確判定是否具有寫入權限」的設計缺陷。
  • 輸入體驗:當組字區不為空的時候,如果摁下了某些漢字輸出轉換與語言模組模式轉換的熱鍵的話,則會在那一刻遞交該組字區的內容(上屏)。
  • 作業系統相容性:與之前的宣稱不同的是,這次 1.5.0 版並未放棄對 macOS 10.11 El Capitan 的支援,因為在技術上不需要放棄。
  • 檔案系統行為:如果輸入法發現使用者語彙檔案路徑對應的對象不是資料夾而是檔案的話,不再套用上游的做法(就地移除),而是分情況:如果該路徑是原廠路徑的話,則對對象進行更名(而非移除);如果該路徑是使用者指定過的路徑的話,則直接報錯。
  • 研發:對 Xcode 專案啟用增量編譯模式。
  • 研發:由 mgrPref 來管理「kCheckUpdateAutomatically」使用者偏好設定參數。
  • 研發:將 UpdateAPI 自 AppDelegate 獨立出來、且將其中的 SupportedLocales 常量矩陣挪到 IME 模組中。
  • 研發:針對 NotifierUI 改用 macOS 10.12 Sierra 推薦的設定(與 macOS 10.11 仍相容)。
  • 研發:引入「MandarinParser」專有術語,專門用來描述 OVMandarin 模組管理的注音配列。藉此與本次引入的另一個用以描述基礎鍵盤佈局的專有術語「BasicKeyboardLayout」(前 BasisKeyLayout)彼此區分開。
  • 研發:將 mgrPrefs 內的用以「自動對寫入空缺的參數寫入預設值」的部分做了程式方面的結構精簡,以求更高的維護效率。
  • 研發:讓 mgrPrefs 內的各種用以映射使用者偏好設定 Plist 條目的內部常量全部靜態化、以便 SwiftUI 版偏好設定視窗使用。
  • 研發:將 resetSpecifiedUserDataFolder 和 RangeReplaceableCollection 這兩個函數從 ctlPrefWindow 挪到 mgrPref 與 IME 模組、以便 SwiftUI 版偏好設定視窗使用。
  • 研發:在 IME 模組內引入專用的函數來直接生成英數鍵盤辨識 ID 專用的數組、以便 SwiftUI 版偏好設定視窗使用。
  • 研發:為 SwiftUI 版偏好設定引入了 SindreSorhus 的 Preferences 模組。為了盡可能規避 Swift Package Manager 的問題,於是對該模組的引用方式為拆包引用。
  • 研發:針對 ctlPrefWindow 舊版偏好設定視窗控制器與 mgrLangModel 語言模組管理器內的一些函數做了調整、以便準確核查指定的使用者語彙檔案目錄是否有寫入權限。本次針對 macOS 11.x 及之後的 macOS 系統使用 SwiftUI 重寫的偏好設定視窗沒有這個問題。
  • 研發:使用 Swift 將 mgrLangModel 語言模組管理器內所有可以用 Swift 改寫的部分全都用 Swift 進行了改寫。該過程中發現了一些藉由 Objective-C 無法曝露出來的類型安全問題,均順手解決。
  • 研發:將 mgrLangModel 語言模組管理器內的「用以檢查具體的使用者語彙檔案是否存在」的相關程式碼做了精簡處理。
  • 研發:針對 ctlInputMethod 內的 activateServer() 與 setValue() 這兩個函數內所有可能涉及到 IMKTextInput 的過程均施加了一個條件開關:當且僅當當前 client 不是該輸入法本體的時候,才會執行這些過程。成果很可觀:這些過程還是被執行了……但當輸入法本身的視窗(偏好設定或者關於視窗等)重新成為當前操作視窗的那一刻,輸入法不再在那裡轉風火輪。
  • 研發:對 Swift 程式碼部分進行了語法先進性檢查,但並未套用全部的檢查結果。
  • 研發:新增了一個用以快速指定倉庫內的新版本號的腳本。

1.4.7b

  1. 功能變更:預設情況下摁波浪鍵出現的符號選單回歸至威注音 1.2.x 以及小麥注音 2.2.2 的式樣。
  2. 功能變更:自威注音 1.3.0 起至 1.4.6 版為止的「新酷音式波浪鍵選單」的熱鍵改為「Alt+波浪鍵」以雪藏之。原因:該選單與至少會被 WeChat、Microsoft Word 2019、iTerm 2 等多款非標準 Cocoa 應用攔截掉方向鍵與翻頁鍵,嚴重影響使用體驗。考慮到十年前的奇摩注音的一點通選單在這些應用當中也出現了雷同的問題,筆者據此認定該問題超出筆者的應對能力範圍,只能暫時作罷。
  3. 專案:整個程式庫引入 Clang-Format 格式整理機制:(Obj)C(pp) 檔案內容採微軟行文規範(因為不會有雙空格縮進);Swift 採 Apple 官方 swift-format 行文規範、且在此基礎上使用 Tab 縮進等自訂參數。全專案函數命名鼓勵採用匈牙利命名法(其次則是以小寫起頭的草泥馬命名法 lowerCamelCase)。詳情請洽 README.MD。部分函數與型別名稱已經據此重新命名。
    // 筆者抵制任何採雙空格縮進的 clang-format 格式:這種設計只是對寬型等寬字型擦屁股的設計、且會對諸如 Iosevka 等半形等寬字型的閱讀體驗構成災難性的影響。
  4. 專案:將所有與選單有關的內容自 ctlInputMethod.swift 抽出、放到一個單獨的檔案內進行管理(但所屬型別不變)。此外,某些在該檔案當中的常數與變數也被抽到 IME 型別模組內進行管理。
  5. 專案:將部分專案檔案挪到正確的位置。
  6. 專案:對所有功能鍵的 keyCodes 命名做了統一規範管理。
  7. 本地化:對 Apple 動態注音鍵盤佈局的名稱描述做了調整。
  8. PKG 安裝程式:對剛執行安裝程式時的說明頁面內容進行了完善、且新增了對終端部署方法的描述。
  9. PKG 安裝程式:更換了安裝程式介面背景、且修整了安裝前後的 preflight & postflight 腳本的內容。
  10. 例行語彙庫更新。

1.4.6

  1. 新增功能:當摁著 Alt 鍵的時候點開輸入法選單的話,會出現允許卸除輸入法的選項。
  2. 新增功能:以非 sudo 命令且以「uninstall」參數藉由終端運行輸入法的話,會卸除輸入法。在此基礎上如果將參數換成「uninstall --all」的話,則會連同使用者偏好設定與使用者語彙檔案資料夾一同清理乾淨。
  3. 以 sudo 命令且以「uninstall」參數藉由終端運行輸入法的話,會清理掉任何被安裝在錯誤的位置的輸入法檔案。
  4. PKG 安裝包做了一些行為調整,以「試圖」做到:在 macOS 10.x-11.x 系統下哪怕不注意輸入密碼以管理員權限安裝、也能將輸入法的相關檔案挪到正確的位置。

1.4.5b

  1. 本次唯一的功能更新:允許使用者自行指定使用者語彙檔案的存放目錄。如果該設定值為無效值的話,則會自動使用預設目錄。
  2. 將語言模組內的偵錯模式訊息輸出綁到了輸入法偏好設定內的偵錯模式開關上。
  3. 修正了語言模組管理器內的一處由上游引入的 Cocoa 類型轉換安全漏洞。
  4. 在 APP 版安裝程式(非 PKG 的安裝程式)當中使用 FileManager 管理輸入法的安裝路徑。
  5. 所有與使用者語彙庫重載有關的命令均由 AppDelegate 挪至 IME 模組、使用單獨的函數來管理,且在 AppDelegate 當中直接調用該函數。
  6. 規範了偏好設定內某些與鍵盤佈局有關的術語與說明描述,使其更易懂。
  7. 解決了自威注音 1.4.1 / 1.4.2 版對 MainMenu.xib 失手引入的一處「在舊版 macOS 系統下無法顯示偏好設定與關於視窗」的失誤。

1.4.4 - LTSB

該版本僅確保在 macOS 12 Monterey 系統內可正常全功能執行。對 macOS 10.11.5 的相容支援已經在 1.4.5b 補回。

  1. 本次更新移除了之前從上游繼承來的「基於 Shift 等修飾鍵來起作用的進階鍵盤配置」功能、以徹底杜絕上次更新時提到過的「NSMenu 攔截修飾鍵切換狀態訊號」的問題。威注音推薦有相關需求的使用者們活用 macOS 內建的 CapsLock 切換中英輸入法的功能。
  2. 無論游標前後放置偏好設定怎樣,現在都會在選詞之後將游標自動放在選中的詞的前方(橫排時是右側、縱排時是下側)。

註解

  1. 經測試發現小麥注音 2.2.2 的進階鍵盤配置的 Shift 鍵符號鍵盤佈局切換的功能仍舊會被某些包括 Dock 與輸入法本身的 NSMenu 妨礙實時獲取當前的修飾鍵狀態、且小麥目前對 Shift 以外的修飾鍵處理完全無效。威注音 1.4.3 已經引入 Alt 符號体系,所以決定閹割掉這個功能、免得被那些試圖用 defaults write 開啟了這個功能的使用者們開工單。

  2. 有些人在使用類似漢音那樣的「游標置於詞語前方」的功能的時候,也會用 HOME 鍵從組字區的最後方開始選字。本次更新在這方面的行為更動,會給這種操作需求情形帶來便利。

1.4.3

該版本僅確保在 macOS 12 Monterey 系統內可正常全功能執行。對 macOS 10.11.5 的相容支援已經在 1.4.5b 補回。

  1. 解決了「在摁著修飾鍵之後點開某些 App 的某些 NSMenu 且在其消失之前鬆開修飾鍵後、無法正常輸入中文」的問題。
  2. 針對 Apple 動態注音(大千&倚天)鍵盤佈局及幾個威注音動態注音鍵盤佈局引入了 Alt-Key 標點輸入設計、以彌補這些動態鍵盤佈局在「缺乏 Alt 鍵特殊符號輸入」這方面的不足。
  3. 修正了在使用 ABC 英數鍵盤佈局時出現的「就地刪詞鍵失效」的問題。
  4. 少數詞語更新,且豐富了一些標點輸入體驗。另外也修正了 Ctrl 符號鍵的失能。

註解

  1. 原理:這次拋棄了之前利用修飾鍵切換鍵盤佈局的設計、且將相關程式處理還原至與小麥注音 2.2 版相同的行為,俗稱「放棄治療」,因為系統內可能會有非標準 NSMenu 妨礙輸入法獲取當前的修飾鍵狀態、且該問題無解:NSMenu 對滑鼠鍵盤訊號攔截的優先權非常高,屬於系統級攔截。輸入法本身的選單倒是在這次更新當中做了對這種現象的免疫處理,然而對諸如 Dock 等其他 App 的非標準 NSMenu 完全無法對策。
  2. Apple 動態注音鍵盤佈局(大千與倚天)以及威注音 pkg 安裝包隨贈的幾個動態注音鍵盤佈局都不支援 Alt 鍵輸入特殊符號,摁了 alt 鍵之後除了等於號鍵是破折號鍵以外、其餘都與美規鍵盤在不摁修飾鍵時的佈局內容無差異。這次引入的 Alt 符號鍵使得這些動態鍵盤佈局再無此類劣勢(但僅限於符號鍵區、而非字母注音鍵區)。
  3. 如果使用者用 defaults write 改過 FunctionKeyKeyboardLayout 的話,則能觸發該問題的鍵盤佈局是 FunctionKeyKeyboardLayout 對應的鍵盤佈局。無論如何,該問題已經在這次更新內修正。
  4. 主要新增了給 Alt 符號鍵用的內容,但一般符號鍵的內容也豐富了很多。

1.4.2

該版本僅確保在 macOS 12 Monterey 系統內可正常全功能執行。對 macOS 10.11.5 的相容支援已經在 1.4.5b 補回。

因 1.4.1 版廢版的緣故,1.4.2 版的更新說明是針對 1.4.0 版而言的。

  1. 允許在就地新增語彙時摁「SHIFT+CMD+ENTER」將既有語彙塞入排除表,俗稱「就地刪詞」。
  2. 解決了飄雲視窗在系統尚未啟用暗黑模式時的背景色配置錯誤。
  3. 針對新酷音的引擎編譯的威注音詞庫腳本已經改用 Swift 重寫,可以利用新酷音的編譯引擎來檢查威注音語料庫既有檔案的格式合規性。結果,在合規性檢查過程中,發現了大量以前因人工編輯不慎而導致的格式錯誤。這次統一進行了修正。
  4. PKG 安裝程式現可在安裝完畢之後自動讓 Monterey 系統提示您是否啟用輸入法。
  5. 修復了之前在威注音 1.4.1 版失手引入的一些按鍵訊號處理流程失誤。
  6. 使用者語彙編輯器的格式整理腳本優化,減少了非必要的 RegEx 處理。
  7. 修正了在輸入法設定視窗內無法使用剪貼簿鍵盤熱鍵的問題。
  8. 為了能不與某些即時通訊軟體發生相容性問題,故將注音文輸入按鍵判定統一為「CTRL+CMD+ENTER」。
  9. 為了方便使用者迅速摁 SHIFT+前後方向鍵 來進入就地新增/排除語彙的狀態,威注音現允許使用者以 SHIFT+前後方向鍵 來關掉選字窗(之前只是會放屁/警告聲而拒絕動作)。

1.4.1

該版本誤將小麥注音的兩處始祖設計認為是某些 Bug 的根源,結果反而導致了 F1-F12 鍵盤對組字區的不當操作。 因為這個原因,將 1.4.1 版廢版處理、重新 Rebase 至 1.4.2 版,免得 commit history 誤導後來者。

關於威注音輸入法在 1.4.1 版開始出現的偶爾敲字卡殼的原因的總結:

威注音輸入法在 1.3.x 中後期版本曾經改動過 ctlInputMethod 當中的對於「依修飾鍵狀態切換鍵盤佈局」的狀態。在這個時候,因為(錯誤決策)拿掉了對每個鍵盤變動事件做出「return false」的處理,導致這個環節產生的垃圾數據被塞給 KeyHandler。然後 KeyHandler 就會在語言模組處理環節之前的最後一個按鍵檢查環節「still nothing」那裡報錯。

總之,1.4.1 版威注音搞錯了三點:

  1. 以為「得砍掉 ctlInputMethod 裡面的 flagsChanged 判定」,反而導致了在「空」輸入法狀態下首次輸入的按鍵沒被送入組字區的問題。
  2. 拿掉了 ctlInputMethod 針對鍵盤佈局更換時的「return false」,結果產生了垃圾按鍵訊號。
  3. 以為「砍掉 still nothing」就好,結果導致垃圾數據就這樣被送給 InputMethodKit、導致 NSInternalInconsistencyException。

哪怕沒有上述前兩點,第三點也會導致某些與 F1-F12 有關的垃圾數據無法被正常處理、導致異常行為。

特此備忘。

1.4.0

  1. 更新了藉由 SHIFT 鍵往組字區輸入字母時的判定,現在判定強制要求 SHIFT 鍵必須被摁下。於是徹底解決了某些情況下「試圖以注音敲漢字、卻發現敲出來的往往都是大寫字母」的問題。此次還將大寫字母鍵的輸入判定由 KeyHandler 挪至 KeyHandlerInput 模組,以進行統一管理。
  2. 在除了威注音語彙編輯器以外的應用內輸入注音文的熱鍵被改回至 Ctrl+CMD+Enter,因為之前的修改無法用來解決上述問題。
  3. 新增 UserSymbolLM 使用者繪文字語言模組,隨使用者語彙自動載入。這樣會方便那些想自訂國旗類繪文字的人群們自行滿足個人需求,畢竟威注音是不會在原廠語料庫內放入這一類資料的。
  4. 輸入法與威注音語彙編輯器的「關於」視窗內新增了前往威注音 wiki 的按鈕。
  5. 解決了使用者語彙檔案自動整理模組會在整理格式時重複插入格式整理標頭的問題。
  6. 針對輸入法的關於視窗與偏好設定視窗重新啟用了 CMD+W 熱鍵關閉視窗的功能支援。
  7. 針對飄雲通知提示窗與偏好設定視窗啟用了 Windows Aero 透明玻璃窗體風格。
  8. 些許詞彙更新。
  9. 圖示重新設計,且優化了選單圖示的可視性。
  10. 單引號按鍵現依台灣注音輸入法使用者習慣、來預設輸出全形頓號。
  11. 修正了 Shift+X 鍵無法往組字區內輸入英文字母的問題。
  12. 就地新增使用者語彙時的提示窗格新增配色支援。
  13. 威注音語料庫的 makefile 腳本做了升級,可滿足該版本今後的詞庫更新需求。
  14. 改良了應用程式圖示在 16x16 規格下的視覺整潔度設計,使其與選單列的新圖示一致。
  15. 將 OpenCC 的語料庫更新為 2022年03月19日時的版本,且附上了幾處威注音自己的轉換規則更正。
  16. 稍微優化了顏文字的字長,但仍建議對該功能有嚴重依賴者使用縱排選字窗。

(9-12 為 1.3.9b 相對於 1.3.9 的更新,13-16 為 1.4.0 相對於 1.3.9b 的更新。) (因為 1.4.0 並無程式方面的實質改動,所以與 1.3.9 合併記錄。)

1.3.8

  • 語言模型:修正了在切換簡繁體中文模式後不會跟著自動同步諸如「全字庫」「繪文字」這類子語言模組的開關狀態的問題。
  • 英數模式:廢棄了不久之前引入的基於 CMD+CTRL+SHIFT+I 熱鍵驅動的「原生英數模式」,因為 CapsLock 模式足夠了。
  • 英數模式:CapsLock 英數模式現在會切換鍵盤佈局至 Apple ABC 佈局,使其行為與 macOS 英文輸入模式一致。
  • 注音文輸入:現將注音文輸入熱鍵統一為 Ctrl+Enter,無須摁 Command。這樣可以避免一些狀態判定問題。
  • 使用者語彙:重新引入 OpenCC 實現了一個新功能:在某個簡繁體模式內使用「摁 SHIFT+方向鍵選擇範圍、敲 ENTER 確認」的方式就地新增使用者語彙時,會自動將藉由 OpenCC 轉換過的結果塞入另一個簡繁體模式下的使用者語彙檔案內、且附以特殊標記(方便人工排查轉換結果是否準確)。
  • 使用者語彙編輯器:糾正一處本地化翻譯錯誤(「轉換微小寫」→「轉換為小寫」)。
  • 使用者語彙編輯器:糾正了正則轉換功能當中的 NSRange 範圍選定錯誤、且調整了正則轉換順序。
  • 語料庫:新增大中華地區的省市名稱記錄。
  • 語料庫:新增了一些繪文字內容。
  • 漢字轉換:威注音內建的康熙字與日語漢字轉換模組現已不再使用 Regex 處理轉換,藉此獲得效能提升。
  • 詞庫編譯腳本:優化了 Regex 算法,進一步縮短編譯時間。

碎碎念:

  • 為了維護威注音的合法性原則,今後威注音並不計畫加入任何國旗類 Emoji。有相關需求者,請自行增補各自的使用者語彙檔案。

1.3.7 OSR3

  • 按鍵行為:糾正了「無法叫出波浪符號按鍵」「想輸入半形減號卻變成別的符號」的問題。
    // 在某些早於 macOS 12 Monterey 的 macOS 系統下使用 macOS 內建的動態大千注音鍵盤模式時才會有這種問題,因為 Apple 在 Monterey(也可能是 Big Sur)系統內修改了內建的大千動態注音鍵盤佈局的符號鍵配置。本次更新放棄之前的 CharCode 判定、轉而使用 KeyCode 判定、以確保波浪符號按鍵在任何版本的 macOS 下都可以正常工作。至此,威注音輸入法所有功能鍵盤按鍵全部使用 KeyCode 來管理。
  • 偏好設定:修改了一些視窗控制項行為處理,使得所有牽涉到語言模型的功能的介面開關可以立即生效。
    // 該改動波及的範圍有:「全字庫支援開關」「繪文字符號輸入支援開關」「語彙置換模式開關」。
  • 英數輸入:允許使用者使用除了 CapsLock 以外的手段切換英數輸入模式(熱鍵為「Ctrl+Cmd+Shift+I」)。
    // 威注音仍推薦使用 macOS 系統內建的 CapsLock 輸入法切換管理功能。
  • 假名處理:支援日語拗音輸入,但必須整個輸入。
    // 一個字符一個字符地分開輸入也可以,只是會非常沒效率而已。
  • 假名處理:半衰模組不再對日語假名產生記憶。
    // 如有大量日語輸入需求者,請考慮自訂語匯、或者使用專門的日語輸入法(強烈推薦)。
  • 選字窗:允許使用者對調 Shift+Space 與 Space 鍵在選字窗內的行為(是翻下一頁、還是選下一個候選字)。
  • 選字窗:允許使用者出於美觀偏好的原因將選字窗內的翻頁按鈕設為「不顯示」。
  • 選字窗:選字窗內的翻頁按鈕的美術調整。
  • 選字窗:針對簡繁體中文輸入模式啟用不同的選中候選字高亮背景顏色。
    // 之前的顏色有些太亮眼,這次繁體中文改用淺藍色、簡體中文改用淺红色,且與系統的明暗模式對應。
  • 使用者語彙編輯器:允許將漢語拼音「cei」轉換「ㄘㄟ」,聲調不限。
  • 雜項:現允許在威注音語彙編輯器以外的程式當中使用 Ctrl+CMD+Enter 將當前組字緩衝區的內容以注音文的形式輸出(且在這種模式下輸出的注音不以減號區隔、而是以半形空格區隔每個漢字的讀音)。
  • 雜項:針對使用者語彙編輯器與使用者核心語料庫編譯腳本的 Regex 處理部分做了效能優化處理。
  • 雜項:使用者語彙編輯器的軟體封包名稱現已被正確本地化。
  • 雜項:允許使用者停用繪文字符號輸入,需藉由「摁 Alt 鍵同時點開輸入法選單」的方式看到開關選項。
  • 雜項:在系統內有安裝更紗黑體的情況下,簡繁體中文模式的選字窗會依照兩岸各自的筆形標準來顯示候選字。
    // macOS 12 開始無須安裝更紗黑體,因為 macOS 12 的 SDK 允許在使用系統字型時指定語言。

碎碎念:

  • 論及僅用 Shift 鍵切換英數模式的功能,威注音暫時沒找到實現方法。考慮到已經在這個功能的製作嘗試上浪費了過多的時間,所以只能先擱置了。
  • 「允許指定在輸入法剛剛初始化時是否啟用原生英數模式」的功能的引入計畫也取消了。不是不能做,而是很難做得完美。加上這個功能本來屬於替某些使用者的過度懶惰行為擦屁股的功能、從開發角度來看無法讓使用者的體驗更細緻,所以這個功能就不做了。

1.3.6

  • 威注音現允許使用者真正地將他們想要加入使用者語匯的內容提權至頂。
  • 輸入法新版本檢查功能現可正常使用。
    // 本次更新修正了威注音 1.3.0 版引入的 ctlNonModalAlertWindow 無法正確呼叫 frmNonModalAlertWindow 的缺陷,於是自動更新檢查功能現可在發現更新版本時正確彈出視窗來提醒使用者要不要更新輸入法。
  • 修正了威注音 1.3.0 版引入的另一個 bug,使得威注音重新支援最多十字長度的候選字。
  • 半衰模組現不再記憶符號數據。
  • 偏好設定視窗內尚未本地化的部分已經全部處理完畢。
  • 使用者語匯編輯器現不再在某些包含高碼位萬國字的行當中執行錯誤的格式整理操作。

其它:

  • 程式碼倉庫與軟體載點搬回 Gitee。
  • libvchewing 模組現已換用 Swift 重新編寫整個用以編譯 macOS 版威注音詞庫的工具鏈、取代了之前使用 GNUtils 和 Python3 的工具鏈。於是現在可以再次使用終端機的 make ; make install 編譯了。
  • 優化了使用者語匯編輯器當中的格式整理模組的執行效率、盡可能減少在統整格式時的 RegEx 的使用。
  • 使用獨立的語言模型來處理注音文與帶有讀音的符號。

碎碎念:

  • 寫給打算手動編譯的人群:此次更新涉及到 libvchewing 模組的檔案結構的大變動、以及輸入法內部的語言模組組態變動,故需要對「./Source/Data」這個 libvchewing 子模組倉庫做 make clean。嫌麻煩的話,請重新克隆整個威注音的倉庫(一定要加上 recursive 參數)。

1.3.5

  • 糾正了上次更新時威注音詞庫新增的陸規審音當中的一些(由機械轉換導致的)錯誤讀音搭配。
  • 糾正了在用 ESC / BackSpace / Delete 鍵取消波浪鍵符號窗格顯示之後「會重複輸入在此之前的組字緩衝區的內容」的不正確行為。
    // 只是解決這個問題的話,反而會出現空白的組字緩衝區、使游標方向鍵與 BackSpace 鍵等按鍵失效。於是這次更正又追加了一筆處理、讓波浪鍵符號表在取消顯示時自動對空白的組字緩衝區進行析構處理。
  • 移除了針對使用者語彙檔案的內容排序功能,因為 C++ 的排序行為不可控。
    // 筆畫排序、Unicode 碼位排序、拼音排序、注音排序……眾口難調。
  • 加入了摁 TAB 呼出選字窗的功能。
  • 加入了在選字窗內允許摁 TAB 向下翻頁/選擇下一個候選字的功能(Shift+TAB 則是向上翻頁/選擇上一個候選字)。使用者可藉由威注音偏好設定來指定 TAB 鍵在選字窗內的行為是用來翻頁還是用來輪選候選字。
  • 新增 PageUp / PageDn 的行為:當候選字總共只有一頁時,讓 PageUp / PageDn 兼任 Home 與 End 鍵的職責。
  • 引入了偵錯模式(預設情況下是關閉的)。該模式可以藉由威注音偏好設定來開啟。當開啟的時候,每當輸入法因為按鍵錯誤導致放屁或者蜂鳴的時候,威注音都可以被 macOS 內建的 Console.app 捕捉到對應的錯誤資訊碼、方便威注音研發團隊迅速定位到 KeyHandler 模組的程式源碼當中的具體位置。

碎碎念:

  • 為什麼非要因為波浪符號鍵而打斷組字緩衝區呢?因為威注音(以及其上游原型)的組字區的內容嚴格上來講都得在語言模型當中有對應的「讀音」體系(哪怕不見得真的是注音讀音、而是某些在詞庫內的定義標識符。但威注音 1.3.0 版開始的波浪鍵雙層級符號選單並不具備這一特徵,所以目前無法使用通常的組字區體系來完成。

1.3.4

  • 威注音重新允許使用者添入重複語彙、但會在使用者語彙檔案內的對應詞條的行尾留下特殊的標記。
    // 威注音 1.3.0 版受上游影響,在使用者就地添加自訂語彙時,不允許添入已經存在於當前語料模型內的語彙(無論是原廠語彙庫還是使用者語彙庫)。然而,使用者可能會對原廠語彙庫內的詞語的排序不滿。這也是雅虎奇摩輸入法的痛處之一。考慮到使用者語彙庫可以用來複寫原廠語彙庫內的優先權級,且威注音有語彙檔案格式整理系統(來專門負責自動將使用者語彙內的重複條目清理乾淨),所以才有了這次更動。
  • 修復了簡體中文輸入模式下在就地新增使用者語彙時無法正確地進行重複判定的問題。
    // 該問題自 v1.3.0 引入,原因是當時忘記對來自上游的該功能做這種處理,導致在簡體中文輸入模式下做重複判定時拿了繁體中文語料模型作為參考對象。
  • 補錄了 Wikipedia 列出的兩岸漢字異讀資料當中的全部的陸規審音。
    // 然而,因為部分僅有音調變化的漢字用到了自動化處理,所以可能存在用力過猛的情況。雖然已經做了一遍人工審核,但可能難免會有疏漏。如有遇到相關問題的話,歡迎隨時提報。
  • 威注音現可利用注音符號拼讀日語假名發音的方式輸入日語假名。日語假名的優先權在所有標準候選字之下、Emoji 與全字庫候選字之上。因為有了這方面的內容引進,威注音現可直接敲入諸如「サ變動詞」這樣的摻有假名的術語。

其它與本次更新有關的內容:

  • 上游 UPR293 不適用於威注音的產品需求,但還是先以注釋的形式來引入(這樣的話便不會生效)。
    // 威注音所以目前能夠摁 SHIFT 預設敲大寫,完全是因為威注音語彙庫的編譯腳本對 data-chs/cht.txt 當中的字母按鍵優先權排序使然。如果想繞過組字區輸入半形大小寫字母的話,當且僅當您在用「Apple 標準注音鍵盤佈局 / 倚天注音鍵盤佈局」這兩個動態鍵盤佈局的時候,可以摁「ALT+字母鍵」輸入半形小寫字母、摁「ALT+SHIFT+字母鍵」輸入半形大寫字母。
  • 上游:解決了部分 C++ 檔案的命名空間污染的問題。
    // Ref: UPR297 & UPR298,不是硬毛病,但有必要做這種改良。

碎碎念:

  • 這次嘗試將自訂動態鍵盤放到 App bundle 內發行,結果失敗了。如果硬要手動部署至「~/Library/Keyboard Layouts/」的話,會帶來檔案管理上的不便。這個計畫只能暫時擱置。

1.3.3c

威注音 1.3.3c 版相比 1.3.3 版緊急修正了兩個錯誤:

  • 「繁體中文模式下在同時關掉康熙與 JIS 轉換時無法敲字」的錯誤。
  • 選字窗迴圈翻頁時的頁碼統計錯誤(會導致在迴圈時出現每次翻頁的頁數異常)。

威注音 1.3.3c 版相比 1.3.2 版的明顯的功能更新如下:

  • 淘汰了肥碩無比的 OpenCC 與 SwiftyOpenCC,轉而使用威注音自製的漢字轉換模組、可以將繁體中文輸入模式的緩衝區的內容轉換成康熙正字或者 JIS 新字體漢字。後者方便那些需要經常在日本亞馬遜等日本購物網站買東西的華語母語者群體。注意:這兩個模式無法同時開啟。如果用 hack 的手段(包括 defaults write)強行將兩者同時啟用的話,只有 JIS 漢字轉換模組會生效,因為 JIS 漢字轉換模組已經包括了「先轉成康熙正字」的先導過程。
  • 論及上次更新引入的 Ctrl+Enter 將緩衝區內容轉為注音文輸出的功能,現在該功能不再開放於全部場合、而是僅允許威注音內建的詞庫編輯器使用該功能。原因在於該功能可能會困擾到某些使用其他 App 的人群。今後會再考慮將該功能做成開關。
  • 選字窗現在可以像雅虎奇摩注音那樣迴圈翻頁:當你往後翻至最後一頁時,再摁下一頁,就會回到第一頁;當你往前翻至第一頁時,再摁上一頁,就會回到最後一頁。
  • 新增了一些其他的可以用來叫出選字窗的按鍵。之前只新增了 PgDn / PgUp,而這次又新增了「向上」鍵(縱排時是「向右」鍵)。
  • 簡體中文詞庫:針對一些詞語修正了「著 ㄓㄨˋ」被寫成「着」的錯誤。
  • 上游:同步修正了安裝程式某處內部檔案路徑判斷方面的部分程式內容。

1.3.2

  • 緊急解決了輸入法無法在終端機內敲字的問題。
  • 就所有詞語收錄《〈國語一字多音審訂表〉讀音適用性與現況之研究》當中的絕大多數合理的民間讀音。
  • 新增偽精業鍵盤佈局。精業鍵盤原版佈局右手最右上角有三個鍵將會在這個新的鍵盤佈局當中被挪到閒置的數字按鍵上。
  • 新增 Apple 注音鍵盤佈局支援、以達成對 macOS 內建螢幕小鍵盤的支援。該功能僅支援 Apple 注音與 Apple 倚天注音佈局,且在使用時需要將偏好設定內的注音鍵盤佈局設定為大千(因為倚天注音的佈局轉換工作轉交給 macOS 來完成了)。
  • 糾正了中文與日文介面的關於視窗內將 MIT-NTL 授權標題誤寫成 3-Clause BSD 的問題。
  • 允許使用「Shift+\」輸入省略號、以因應「Apple 注音與 Apple 倚天注音佈局無法用 Alt+; 輸入省略號」的情況。
  • 糾正了在啟用 Apple 注音動態鍵盤佈局時、偏好設定介面無法反應這個啟用狀態的問題。
  • 上游:禁止 UserOverrideModel 對符號產生記憶。
  • 上游:允許使用 Ctrl+Enter 輸出「當前緩衝區內文字」的注音文。該功能僅用來方便使用者快速大批次自訂語彙。
  • 上游:小幅重構對選字窗橫豎種類的處理方式。

1.3.1

  • 波浪符號選單內的分類名稱現已針對不同的語系介面完成本地化。
  • 新增神通注音鍵盤佈局。
  • 針對「SHIFT+方向鍵選字時的選區容量計算失誤」的情況,引入了一個可以讓問題不發作的保守治療方案。然而,在使用 Swift 重寫該輸入法的核心組件之前,針對該問題的徹底解決只能是吃力不討好。畢竟 Swift 本身就支援 UTF-8,全用 Swift 重寫了的話、就不需要為 NSRange 擦屁股了。

1.3.0

  • 威注音語彙編輯器。之前 1.2.x 版會自動對使用者語彙檔案進行格式整理,但這樣卻會導致與系統內建的 TextEdit 編輯器的行為衝突。雖然使用者可以強行存檔,但畢竟這種情況還是會令使用者困惑。於是威注音在這次更新當中引入了一款簡易的語彙編輯器,不但可以在存檔讀檔過程中自動糾正格式、還會自動將漢語拼音二式轉換成注音。此外,經過威注音語彙編輯器與威注音輸入法統整過格式的檔案,都會在第一行出現專有的辨識標頭、以令威注音輸入法本體在讀到該標識時不再自動統整檔案格式(但仍會檢查檔案結尾是否缺少換行符,此乃 unix 規範)。

  • 使用者自訂聯想詞功能。該功能僅會在啟用逐字選字模式時起作用。出於對上游的聯想詞表數據的來源的不信任(恐有著作權疑慮,但與 zonble 無關),威注音不內建聯想詞庫,但允許使用者在輸入法選單內呼叫威注音語彙編輯器來編輯其內容。今後若是有時間與技術條件的話,威注音會考慮怎樣讓該聯想詞功能動態利用輸入法內原有的語彙庫的語彙數據。需注意的是,聯想詞功能需要摁住 SHIFT 鍵的同時摁選字鍵。聯想詞編輯格式為「首字+半型空格+該詞彙的剩下的字」,比如每一行可以是「天 涼好個秋」這樣的格式。與其他可以被使用者自訂的語彙檔案相同的是,行的順序會影響到聯想詞的排列順序。

  • 感謝 zonble 在上游引入了波浪鍵雙層符號選單的功能(他不是為威注音開發的,而是為社會開發的),所以這次威注音引入了在內容方面比之前新酷音TSF/香草酷音更豐富的符號表,可以輸入貨幣符號、空心箭頭、雙向箭頭、劃圈假名等符號。今後若是有時間條件的話,威注音可能會考慮將該功能做成可以由使用者自訂的功能。

  • 使用者可藉由 SHIFT 鍵自訂的語彙的長度由 6 字擴增到 10 字。

1.2.1

  • 簡體中文輸入模式的選單圖示顏色變動(之前的嚴重缺乏對比度);
  • 簡繁體中文輸入模式的輸入法選單列的標籤名稱由原來的「威注音/威註音」變更為「威注音-簡/繁」。
  • 輸入法本體 info.plist 一處語言標籤錯誤修正,以絕可能之隱患(不影響繁體中文輸入模式)。

1.2.0 首發版

威注音 1.2.0 版相比小麦注音 2.0.1 版而言的功能变更如下:

  • 簡繁體中文詞庫彼此分離,且徹底重塑。此外,威注音的詞頻數據來自於 NAER、而非 SinicaCorpus 與 Libtabe。除了讓部分地區的威注音輸入法使用者在分享時免於觸法以外,威注音的繁體中文輸入模式很難說哪裡就一定比小麥注音的原廠詞庫更怎樣。但威注音的簡體中文輸入因此得以杜絕任何可能藉由繁簡轉換導致的錯誤結果。
  • 威注音支援通用規範漢字表全部漢字的單獨輸入、支援 2022-01-07 版全字庫的全部漢字的單獨輸入、也支援自《通用規範漢字表》頒佈以來至 2022 年 01 月為止的化學元素符號用漢字的輸入。
  • 威注音會在讀取使用者自訂語匯檔案時自動統整檔案格式、且只會在手動啟用排序功能時才對內容進行排序。
  • 威注音不會擅自連網。某些公司可能會有極端變態的資安策略,所以威注音的線上更新功能預設是關閉的。
  • 威注音的偏好設定視窗會正確反映當前生效的預設參數,因為在第一次使用威注音時、這些參數就會被寫入到您當前系統使用者目錄下的威注音輸入法的屬性清單(plist)內。
  • 威注音的放屁模式主要是為了讓知恥的新手自我督促自己正確敲字來用的,但請抱持後果自負的態度來使用。也就是說,請千萬不要在辦公場所、就學場所、以及各種類似 NSFW 這樣的敏感公共場所內啟用該功能。
  • 為了照顧某些習慣於傳統ㄅ半注音的使用者群體,威注音也提供了模擬逐字選字輸入的功能(且威注音的這個模式會與預設的快打模式共用語彙庫模型資料)。然而,出於詞庫維護方面的工作壓力,威注音在開啟模擬逐字選字輸入模式的時候並不支援聯想詞的功能。
  • 威注音預設支援最多十個字的長度的自訂語彙、且預設情況下的緩衝區長度為 20 字。小麥注音可以藉由終端機的指令做到這一點,詳情請洽小麥注音官方 GitHub 倉庫的 wiki。
  • 威注音在使用 SHIFT+方向鍵的功能快速新增使用者自訂語彙時,不會因為選區內出現高萬國碼的漢字(比如《全字庫》才有的某些字、還有《通用規範漢字表》新增「噁」的類推簡化字「口恶」等)而導致功能異常(乃至輸入法崩潰)的現象。
  • 威注音可以使用康熙模式、來將某些台澎金馬常用字轉成康熙字。該功能藉由 OpenCC 驅動。相關的轉換失誤問題請提報給 OpenCC 專案。
⚠️ **GitHub.com Fallback** ⚠️