新增功能:
在 GTK 3 TextViewWidget 當中鍵入一個英文字,cursor 緊停在該字後方的情況下,按下 Ctrl+Enter 組合鍵,就透過 Hashing 去找對應的「台語白話字」(POJ),若有找到就將該英文字代換成 Pe̍h-Ōe-Jī。
例如:鍵入 fish 之後按下 Ctrl+Enter 鍵,第一次會代換成 hî,再按一次 Ctrl+Enter 會代換成 hî-á,繼續按就是又回到 hî (looping)。
來看一下測試的截圖畫面:

第一次按下 Ctrl+Enter:

第二次按下 Ctrl+Enter:

第三次按下 Ctrl+Enter 會回到 hî (looping);
來看一下 GTK 3 的程式碼,如何在 TextViewWidget 當中由 insert cursor 所在位置去抓出前一個字 (測試用的程式碼,測好後整合到 SiaTaigi):

再讓大家看一下筆者所建立的 Eng2Poj 資料庫 (a static array),這些資料會經由 Hashing Function 存放到對應的 bucket 當中,collision 發生時採用最簡單的 linked list 方式來解決。

然而,上述的程式碼遇到 "daughter-in-law" 時會發生問題,因為 GTK 3 的 API:
gtk_text_iter_backward_word_start() 與 gtk_text_iter_forward_word_end()
會將 hyphen "-" 當成 word separator,以致於往回抓到的字是 "law",而不是完整的 "daughter-in-law"。

怎麼辦呢?其實 GTK Official Site 的 Documentation 寫得不太好(GTK 做得很不錯,但 Documentation 寫得很爛),因為其說明實在是太過簡略而常常說得不清不楚,相關的APIs 如何協同合作以完成一個小工作的 code snippet 非常非常少,以致於大多數還得自己寫測試程式去 try APIs,那實在是非常花費時間與心力,於是筆者就想說「找 AI 問看看」,沒想到問了之後,Copilot 的回答還蠻清楚扼要的,而且大部分其所回答的 code snippet 都還蠻切題的,真的是幫筆者省下了不少時間與心力!(真的很感謝 Copilot,沒想到免錢的版本就已經這麼好用)

筆者將 Copilot 所回答的 code snippet 整合到 SiaTaigi 程式中,測試後的確可以達成功能。

繼續測試:




AI 實在是太棒了,利用它們來輔助寫程式,的確可以省下不少心力,筆者還就此順便要求它們寫一些程式,例如 system UUID、system GUID、MAC addresses ... for MSYS2 platform 等等;就目前的測試結果而言,筆者覺得 Copilot 的程式能力比 Gemini 好上一些,雖然兩者是互有輸贏 (有時候 Copilot 的 code snippet 可以運作,Gemini 的不行,有時候是 Copilot 的不行,而 Gemini 的可以運作)。
第一項新增功能已經完成,剩下的就是要建 database,不知道 AI 懂不懂台語白話字,不然就可以要求它幫我建立資料庫。
心中還有另一項功能是:如果 TextViewWidget 有 Selection,就先以 Selection 來做搜尋與置換(Selection 可以涵蓋多字到完整的一個句子),如果沒有 Selection,就以 Cursor 之前的字來做搜尋與置換。這部分就等有空再做了!
好了,今天的分享就寫到這裡!Have a nice day!









