打比方說輸入法原廠詞庫內有「章太炎」一詞,你敲「章太炎」,然後想把「太」改成「泰」以使其變成「章泰炎」。macOS 內建的注音輸入法不會在這個過程對這個詞除了「太」以外的部分有任何變動,但所有 OV 系輸入法都對此有 Bug:會將這些部分全部重設為各自的讀音下的最高原始權重的漢字。也就是說,選字之後的結果可能會變成「張泰言」。
類似的可以拿來測試的詞有「蔡依林」「周杰倫」。
測試時請務必也測試「敲長句子、且這種詞在句子中間出現時」的情況。
該問題波及迄今為止幾乎全部的 OpenVanilla 系輸入法,至少波及:
- 自然輸入法 mac 版 v11。 (不討論 v12)
- 奇摩輸入法 (最終版本)。
- 小麥注音輸入法 (截至 v2.4 的全部版本)。
也波及下述非 macOS 平台的輸入法:
- 微軟新注音 2010 / Windows 10 & 11 內建微軟新注音。
- 新酷音 TSF。
威注音輸入法截至 v1.9.3 SP2 版為止都受到上游的這個 Bug 的影響。
針對該問題有關的修正會在威注音 v1.9.4 版當中推送。
該修正必須搭配至少天權星組字引擎 v2.0.2 版方可生效。
威注音這次對該問題的修正算法可能比較囉唆,但至少在常用情形下不會再發生該問題。
如果還有問題的話,請依下文指引來電郵聯絡我、且在電郵內仔細闡明觸發條件:
https://vchewing.github.io/BUGREPORT.html
技術細節:
先在游標位置找出既有節點,記住這個節點的始末範圍(範圍A)。
然後再檢查要拿來覆寫成的字詞在覆寫成功後會有哪些始末範圍(範圍B)。
取範圍 A B 之併集,成為範圍 C。
然後檢查範圍 C 的邊界是否有切到(在這次覆寫行為之前的)前後方節點。
有的話,將那個節點的遠端也算入 C 的範圍內、更新 C 的邊界。
最後,將範圍 C 內的所有節點都以最小的幅位長度(spanLength)為單位……
……先用最高手動權重覆寫一遍。
(如果是字音數量不一致的節點的話,以該節點為單位;否則以漢字為單位。)
這樣一來,就完成了對游標上下文內容的鞏固工作。
然後再拿你在選字窗內選中確認過的候選字詞(的詞音配對)來覆寫節點。
這時,天權星組字引擎 v2.0.2 的更新就起作用了:
會將這次覆寫範圍內存在的「剛剛被鞏固過的最小節點們」的權重自動減半。
這樣一來,覆寫範圍外的內容就不會受變動。
因為都被標記過覆寫狀態、就不會被 walk() 爬軌函數改成你不想要的結果。
打比方說輸入法原廠詞庫內有「章太炎」一詞,你敲「章太炎」,然後想把「太」改成「泰」以使其變成「章泰炎」。macOS 內建的注音輸入法不會在這個過程對這個詞除了「太」以外的部分有任何變動,但所有 OV 系輸入法都對此有 Bug:會將這些部分全部重設為各自的讀音下的最高原始權重的漢字。也就是說,選字之後的結果可能會變成「張泰言」。
類似的可以拿來測試的詞有「蔡依林」「周杰倫」。
測試時請務必也測試「敲長句子、且這種詞在句子中間出現時」的情況。
該問題波及迄今為止幾乎全部的 OpenVanilla 系輸入法,至少波及:
也波及下述非 macOS 平台的輸入法:
威注音輸入法截至 v1.9.3 SP2 版為止都受到上游的這個 Bug 的影響。
針對該問題有關的修正會在威注音 v1.9.4 版當中推送。
該修正必須搭配至少天權星組字引擎 v2.0.2 版方可生效。
威注音這次對該問題的修正算法可能比較囉唆,但至少在常用情形下不會再發生該問題。
如果還有問題的話,請依下文指引來電郵聯絡我、且在電郵內仔細闡明觸發條件:
https://vchewing.github.io/BUGREPORT.html
技術細節:
先在游標位置找出既有節點,記住這個節點的始末範圍(範圍A)。
然後再檢查要拿來覆寫成的字詞在覆寫成功後會有哪些始末範圍(範圍B)。
取範圍 A B 之併集,成為範圍 C。
然後檢查範圍 C 的邊界是否有切到(在這次覆寫行為之前的)前後方節點。
有的話,將那個節點的遠端也算入 C 的範圍內、更新 C 的邊界。
最後,將範圍 C 內的所有節點都以最小的幅位長度(spanLength)為單位……
……先用最高手動權重覆寫一遍。
(如果是字音數量不一致的節點的話,以該節點為單位;否則以漢字為單位。)
這樣一來,就完成了對游標上下文內容的鞏固工作。
然後再拿你在選字窗內選中確認過的候選字詞(的詞音配對)來覆寫節點。
這時,天權星組字引擎 v2.0.2 的更新就起作用了:
會將這次覆寫範圍內存在的「剛剛被鞏固過的最小節點們」的權重自動減半。
這樣一來,覆寫範圍外的內容就不會受變動。
因為都被標記過覆寫狀態、就不會被 walk() 爬軌函數改成你不想要的結果。