(2021 Q4~2022 Q1)
1.2.0 4083f18
至 1.3.x 1e7459a
~e39384c
04d4c60
~1.5.x 07a6a51
96453d0
~1.9.x 345c03d
5327825
KBEvent
前身引入、FolderMonitor 由 FSEventStream 改寫、工具提示改 NSAttributedTextView。Dijkstra
)、3.9.2(POM 修訂)註:表中提交號僅列核心節點;1.3.x~1.9.x 完整 commit 清單請參考 AncientArchive (
1e7459a
~345c03d
),2.6.2 以後則可在主倉vChewing-macOS
以 tag 對照。
以下里程碑以 git tag --sort=creatordate
與關鍵提交為依據,並可對照官方發佈頁:
2022 年度版本資料取自
vChewing-macOS-AncientArchive
的鏡像歷史;由於該倉庫未保留 Git tag 實體,故以「Bump version」提交與同日合併提交對應公開版本。
5e0978b5
:倉庫結構調整與子模組納入,作為 Swift 化前置作業。4083f189
):首個 1.x 版本(r893)發佈,完成移轉後的初始包裝。1e7459ae
~b4f72943
):連續釋出 1.3.0~1.3.9b,逐步修復候選與資料(含 1.3.7 OSR2 54e853c2
、OSR3 89f54cb6
)。04d4c606
~dcc2f7ee
):1.4.0~1.4.7b 聚焦安裝相容性與候選窗修補,其中 1.4.5b be22d913
提供額外相容性修正。61d1e4ab
~9a71d52e
):1.5.0 大量整併 Gitee PR;1.5.1 a201ee4d
開始 Swift 化 KeyHandler
;1.5.4 f43e3f59
引入 Megrez;1.5.7 0cde7469
導入 Tekkon;1.5.9 9a71d52e
增補拼音輸入與資料更新。96453d04
~98b8e920
):強化熱鍵體驗、效能與多語支援,涵蓋 1.6.x、1.7.0 及其 SP 修正版。cd8bcbd0
、9acbdaeb
、4bdb528f
):聚焦候選列表穩定性與 bug 修補,為後續 Swift 拆模鋪路。433b3ea5
、f0a33c08
):拆解 ctlInputMethod
、移除 ObjC++ 橋接並加強組字調度偵測。1eae8198
、4ff9051c
、21e4aaff
),新增 Alt+方向鍵選字、候選高亮調整。62e37af4
、27b51ea8
、509262bf
、1962455e
、5ba2d518
、c68d7dd1
、d5f0ed4b
、c7f218ae
、f7e703dc
):完善關聯詞、數字鍵盤支援、Starlight/Seigyou 排列、Shift/Alt 英數模式與救援修補。a227fa84
、71afd139
、75e93d09
、345c03db
):IMKCandidates 功能定型,包含聯想詞改進、Shift/候選視窗介面調整與上下文併句最佳化。59df9a5f
, 53278250
, 2c52c41d
),引入客製字型與視窗層級調整。91b27c12
),配合 Swift Package 拆分與 Issue Template 建置。83737af7
, 504a1d70
, 18596d52
)。1f0e58cf
),建立後續沙箱部署基線。7054c4ea
, c6f03b42
)。1b172e41
, cd379b82
, 3f7d0d1b
)。131eda08
, 59b0cc1c
, 2fe7123a
)。1c43d6b3
, 19c9ee84
, 7d37a76e
)。be46d1bd
, c7b6fd7a
, 0a1e855d
)。9d077a9d
、030a8cb7
等)。339cfb0a
:田所選字窗核心改寫(AppKit + CoreGraphics 重繪,CandidatePool/CandidateCellData 重構),正式捨棄 SwiftUI 捲動實作。424a736c
, b20dfec6
, e887ba01
)。1c3225d3
),為 4.0.0 DAG-DP 過渡階段。PathFinder
採 DAG 動態規劃(Packages/vChewing_Megrez/Sources/Megrez/2_PathFinder.swift
),FolderMonitor Actor 化與 Debounce 完成,直書提示方案改版;同日發佈 tag 4.0.0
。專案 | 主要語言 | 核心維運者 | 目標系統 | 授權 | 定位 |
---|---|---|---|---|---|
小麥注音 (McBopomofo) 2.9.3 | Objective-C++, C++17, Swift | OpenVanilla 核心團隊 | macOS 10.15+ | MIT | Formosa::Gramambular2/OVMandarin MK2 實作、強調穩健與開源協作 |
威注音 (vChewing) 4.0.0 | Swift 5.9+, 極少量 ObjC | Shiki Suen 等 | 主流版 macOS 13+;Aqua 紀念版支援 10.9 | MIT-NTL | Swift 原生化注音輸入法、專注安全與模組擴展 |
面向 | 小麥注音 2.9.3 | 威注音 4.0.0 | 來源參考 |
---|---|---|---|
輸入訊號 | KeyHandler (Objective-C++) + KeyHandlerInput (Swift struct) | InputHandler (Swift) 直接擴展 NSEvent / KBEvent | mcbopomofo/Source/KeyHandler.mm ;vChewing_MainAssembly/InputHandler_Handle*.swift |
態械 | InputState 類別階層(NSObject) | IMEState / IMEStateData 單一 struct + protocol | mcbopomofo/Source/InputState.swift ;vChewing_MainAssembly/IMEState.swift |
組字引擎 | Gramambular 2 (C++, DAG-Relax) | Megrez (Swift, DAG-DP;3.9 系列曾採強化版 Dijkstra) | mcbopomofo/Source/Engine/gramambular2 ;vChewing_Megrez |
聲韻並擊 | OVMandarin MK2 (C++) | Tekkon (Swift) | mcbopomofo/Source/Engine/mandarin ;vChewing_Tekkon |
候選窗 | Voltaire MK2 (Swift Cocoa);VoiceOver 朗讀 | 田所選字窗第三代(Cocoa + CoreGraphics,自繪矩陣,前後端分離) | mcbopomofo/Source/NonModalAlertWindowController.swift 等;vChewing_CandidateWindow |
安全 | 無沙箱;允許就地腳本掛鉤 | macOS Sandbox、浮動組字窗強化模式、客體管理器白名單 | mcbopomofo/add-phrase-hook.sh ;vChewing_MainAssembly/InputHandler_HandleSecurity.swift |
字典 | Parseless LM (TXT) + 使用者詞庫 TXT | SQLite 原廠詞庫 + 使用者 TXT,內建整理器 | LanguageModelManager.mm ;vChewing_LangModelAssembly |
監控 | FSEventStream | DispatchSourceFileSystemObject + Actor + Debounce | Packages/FSEventStreamHelper ;DanielGalasko_FolderMonitor 改造 |
KeyHandlerInput
將 NSEvent
轉換成內部 struct,KeyHandler
依狀態機驅動。Emacs key 等特殊鍵需逐層傳遞。NSEvent
擴展 InputSignalProtocol
,並提供 KBEvent
克隆以 struct semantics 處理;在訊號入口即翻譯 Emacs 快捷鍵並塞入狀態資訊(例如直書模式)。NSStringUtils
處理 UTF-16 範圍;UI 資料(NSAttributedString
)與狀態緊耦合。IMEState
+ IMEStateData
拆分資料與行為,預設以 UTF-8 游標記錄,僅在回傳 IMK 時投影到 UTF-16;就地加詞/刪詞/降頻、Tooltip 顏色與候選過濾皆以 value-type 快照儲存。defaults write
後就地執行腳本;無沙箱束縛,FSEventStream 監控可能放大外部干預風險。markedText
被探知;新增 FolderMonitor Actor 化並加入 Debounce,降低 iCloud 同步抖動造成的 Hang 風險。功能 | 小麥注音 2.9.3 | 威注音 4.0.0 | 備註 |
---|---|---|---|
注音排列 | 大千傳統、倚天傳統、IBM、許氏、倚天 26 | 上述+神通、(偽)精業、酷音大千 26、星光、劉氏 | 威注音動態排列可因模式調整鍵位 |
拼音 | 單一拼音模式(未提供文件) | 漢語、國音二式、華羅、耶魯、通用、韋氏;並擊提示拼音 | |
CIN 表格 | ✖️ | ✅(磁帶模式支援 CIN2) | |
Emoji 組態 | 原廠 Emoji,無獨立詞頻 | 專屬使用者 Emoji 辭典 + 開關 | |
就地加詞/刪詞/控頻 | 只支援加詞 | 加詞、刪詞、升降頻(Shift+Command+Enter 降頻) | 支援詞音不等長 |
CapsLock 強制英文忽略 | ✖️ | ✅ | 顧及微軟新注音習慣 |
候選矩陣 | ✖️ | ✅ 橫/縱排矩陣(田所) | |
Unicode 資訊 | ✖️ | ✅(田所) | |
VoiceOver | ✅(2.9.3 後) | ➖(規劃重做) | 威注音採自繪矩陣,尚未加入 AX 子樹 |
熱鍵輪替候選 | Shift(+Alt)+Space、Alt+↑/↓ 等 | Shift(+Alt)+Space、Alt+↑/↓(橫)/Alt+←/→(縱) | 威注音納入直書焦點鞏固 |
Alt 熱鍵佈局切換 | ✅(終端設定) | ✖️(避免 NSMenu 攔截) | |
漢音符號 | 部分符號 | 完整漢音符號+分層符號表(可自訂 symbols.dat ) | |
簡繁支援 | 轉換(OpenCC / VXHanConvert) | 原生繁/簡詞庫 + Hotenka 詞組轉換 + JIS/康熙選項 | 威注音就地加詞跨模式同步 |
W3C Ruby | Linux 版支援注音,mac 版無 | 支援注音(教科書式)、漢語拼音 Ruby | |
日期巨集 | ✅ | ✅(並新增銀行大寫數字等) |
EOF
修復與可選腳本。項目 | 小麥注音 | 威注音 |
---|---|---|
沙箱 | ✖️ | ✅ (限制檔案/進程存取) |
浮動組字窗 | ✖️ | ✅(強化模式,可針對客體 App 指定) |
網路連線 | 自動檢查更新(預設啟用) | 手動啟用檢查更新 |
就地腳本 | ✅(可在 defaults 中設定) | ✖️(禁止執行) |
資料上傳 | 無 | 無(沙箱防護) |
典型風險與緩解:威注音以浮動組字窗阻斷 markedText 被輪詢、SandBox 避免腳本濫用;仍無法抵禦系統層級鍵盤側錄。小麥注音提供彈性但須使用者自律,腳本掛鉤若被濫用可能造成資料外洩。
NSAccessibilityElement
,在 VoiceOver 下可被朗讀,但僅支援橫排選字。AXChildren
與 AXSelectedChildren
,同時保留 macOS 10.9 回溯相容。量測環境:macOS 14.0 (arm64e)、Apple Swift 5.10 toolchain。
指標 | 測試方法 | 結果 |
---|---|---|
候選生成平均延遲 | swift test --skip-build --filter MegrezTestsAdvanced/test08 | 約 5 ms |
DAG-DP 長句評分 | test09_Compositor_StressBench | 0.0030 s(建圖耗時 24.6 s) |
記憶體峰值 | /usr/bin/time -l swift test --skip-build --filter …test09… | 117 MiB RSS |
學習權重寫入 | test10 | 0.010 s / 52.7 MiB RSS |
FolderMonitor 去抖動 | 360 原始事件 → 1 回呼 | 99.7% 抑制 |
(小麥注音官方未提供對等測試指標。)
HangarRash_SwiftyCapsLockToggler
, Qwertyyb_ShiftKeyUpChecker
等外部套件以強化體驗;相對地 mcbopomofo 使用 NSStringUtils
、FSEventStreamHelper
等傳統依賴。mcbopomofo/Source/Engine/gramambular2/
、mcbopomofo/Source/Engine/mandarin/
、mcbopomofo/Source/InputState.swift
、mcbopomofo/Source/KeyHandler.mm
。vChewing-macOS/Packages/vChewing_Megrez/
、vChewing-macOS/Packages/vChewing_Tekkon/
、vChewing-macOS/Packages/vChewing_MainAssembly/
、vChewing-macOS/Packages/vChewing_CandidateWindow/
。TechnicalWhitePaper.md
的重構版,以資訊架構重整、聚焦關鍵差異與安全模型。原始文檔保留作為歷史背景與細部敘述參考。