大概在月初的時候,OpenVanilla 開發團隊決定近期內再推出一個版本,下一版的版次為 0.8 版;實際的推出日期還不確定,到時候新的版本會包含多少新功能,很多也還不確定,總之,在這邊先聊一下這一兩個星期的實作進度。
目前 OpenVanilla 主要在 Windows 以及 Mac OS X 兩個平台上發展,而團隊目前也對於 Mac OS X 平台的開發比較熟悉,我個人也只有處理 Mac OS X 這部份,所以,以下的內容,也以 Mac OS X 平台為主。
大概在月初的時候,OpenVanilla 開發團隊決定近期內再推出一個版本,下一版的版次為 0.8 版;實際的推出日期還不確定,到時候新的版本會包含多少新功能,很多也還不確定,總之,在這邊先聊一下這一兩個星期的實作進度。
目前 OpenVanilla 主要在 Windows 以及 Mac OS X 兩個平台上發展,而團隊目前也對於 Mac OS X 平台的開發比較熟悉,我個人也只有處理 Mac OS X 這部份,所以,以下的內容,也以 Mac OS X 平台為主。
稍微有點時間,來回覆一下一些朋友之前問到的問題。
一、可否能夠改寫OpenVanilla 通用輸入法表格編輯器—讓使用者在自行編輯輸入法表格的時候,只要先點選某個按鍵組合,然後便可以列出所有符合這個按鍵組合的對應輸出結果。如果某個輸入法的設計是會出現很多候選字(例如注音、拼音等),會需要這樣功能。
最近幾天花了點時間,是寫出了這樣的東西。能夠在選取某一筆資料之後,列出對應的資料,換句話說,就是要建立資料之間的關聯,也就是需要一些資料庫方面的功能;既然需要一些資料庫功能,又適用 Cocoa 開發,在改寫的時候,便使用了蘋果提供的 CodeData 架構,透過CoreData建立了一個簡單的Model,在讀入輸入法表格的時候,將資料轉換成NSManagedObject,一邊輸入一邊檢查:如果某個對應到按鍵組合的物件存在,那就使用這個物件,反之則建立物件,將對應的結果與之建立關聯,在GUI方面,則是用 Cocoa Binding 搞定…。
右圖便是開啟簡易輸入法的表格時的畫面。
雖然是做出來了,但是效能實在很不好,大概算了一下,如果要這麼做,處理一筆資料,大概要花上0.1到0.2秒的時間,而一般的輸入法少說都有一兩萬筆資料,更不要說有七八萬筆資料的輕鬆輸入法了;以兩萬筆來說,那就需要花上至少半小時才能夠載入,在選好要載入的檔案之後,就只能看到奪命小彩球一直轉,整台機器近乎呈現當機狀態。這樣的東西實在不太能夠拿出來見人,而總感覺問題應該出在 CoreData 本身。
前陣子燈哥也提到,最近我在寫OpenVanilla 的「通用輸入法編輯工具」,而這一兩天算是把這個工具弄成了大概可以見人的樣子。
這個工具的主要功能,就是建立新的查表式輸入法給 OpenVanilla 使用,或是修改既有的 OV 輸入法表格,增加自己需要使用的按鍵組合。OV 的通用輸入法表格是 UTF-8 編碼的純文字檔案,用任何(支援 UTF-8 編碼的)文書編輯軟體都可以開啟、編輯,不過,有一個專屬的工具介面,相信還是會有方便的地方。
大抵來說,這個工具比較適合對於一套輸入法的表格做小規模的修改,例如覺得「漁村輸入法」裡頭提供的奇怪符號不夠多,臨時想要再加入一兩個符號進去…而比較不適合拿來做一個比較巨大的輸入法表格,如果您是要把 XCIN 或是 SCIM 的表格轉換成 OV 使用啦,可能還是直接拿出 Smultron 出來改文字檔本身比較快。—畢竟其實自己是抱持著練習 Cocoa 的習作心態在寫(例如:練習看看寫工具列啦、練習看看 Cocoa 提供的 Document-based 的應用程式怎麼寫啦),而 Cocoa 可以提供的物件也實在頂多,總覺得自己還需要多寫一些東西才能夠更熟悉一些。
由於這個程式算是一個獨立的工具,而 OpenVanilla 的通用輸入法的表格規格也一直沒有什麼改動,所以,不管是安裝那一個版本的 OpenVanilla,都可以用這個工具修改表格。目前寫出來的東西只有在 Mac OS X 10.4.9 上面測試過,至於 10.3 或是最近有人拿到的 10.5…都還沒有試過,我手邊也沒有安裝這些作業系統的機器。
下載:http://openvanilla.googlecode.com/files/OpenVanilla-OSX-CinEdit-0.7.2-20070612.zip
這一陣子又改了一下 OpenVanilla,大概如下:
在0.7系列之後,OpenVanilla 採用了蘋果比較新的 API,不再將圖示資訊寫在 resource fork 裡頭,而是將資料定義在一個外部 icns 圖示檔案裡頭(依照蘋果的 API,除了 icns 檔案之外,也可以使用 .tiff 檔案,總之,請參見Technical Note TN2128裡頭的 “Do I still need to define my icons in my component’s resource fork?” 部份)。而因為是定義在外部檔案中,所以每個人裝了 OpenVanilla 之後,都可以自己修改 OV 的圖示,之前也有一篇相關的介紹文件,就在說明如何更換香草圖示,在 OV 0.7.2 中,也包含了一組可選用的圖示。
但,老實說,實在有些麻煩:一來要搞清楚 Mac OS X 的 Bundle 結構,二來,如果不想用隨著 OV 0.7.2 附帶的圖示,那自己需要稍微搞清楚怎麼透過影像處理軟體,做出圖示來…而看到身邊許多人裝了 OV 之後,都很想要把圖示換掉。所以搞了一個「圖示修改器」。
OpenVanilla 輸入法專案開始嘗試透過 WebKit ,在 Mac OS X 上設計選字窗介面這件事情,從算是開始進行以來,也大概快要一年了,不過,大概從去年九月之後,似乎都沒有再去動過這部份的程式。
上個週末心血來潮,把之前的程式碼重新看了一下,一方面找到原本無法成功使用透明視窗背景的問題癥結,另一方面也參考了蘋果的開發者網站上的範例程式,搞清楚怎樣做出無框視窗。雖然距離告一段落、能夠正式釋出還有一段距離,不過,應該是比之前狀況,堪用得多。接下來,又繼續做了一些選字框介面的實驗。
所謂用 Webkit 製作選字框介面的意思是這樣的:在目前的 0.7.2 版上的選字窗,是先畫出一個視窗,然後直接在視窗上放一個跟這個視窗一樣大小的文字元件;而目前在做的事情則是,我們在選字框裡頭放了一個小小的網頁瀏覽器(也就是 Webkit),透過網頁方式呈現輸入法的候選字清單,方法是,Cocoa 可以從外部將 JavaScript 指令傳到 Webkit 瀏覽器中,所以,像更新選字窗內容、關閉選字窗這些事情,只要透過網頁技術完成即可。—透過不同的網頁樣式設計,便可以得到不同風格的輸入法使用介面,每一種不同的輸入法介面,也可以透過個別的 JavaScript 程式碼,設計不同的行為,甚至(因為是網頁嘛),在輸入法中,還可以呼叫 Flash 影片啦、Google 地圖啦…諸如此類。
或這麼說:你現在可以在 Dashboard 上看到的 widget,只要稍微改寫個幾行,就可以改成 OpenVanilla 的選字窗。反之,OpenVanilla 的選字窗,也可以放在 Dashboard 上。
如果你在 Mac OS X 上在打開 Flex 建構的網頁,或是在 Flash 應用程式中的文字輸入框中,切換成 Mac OS X 內建的輸入法—例如漢音輸入法)—你可以順利輸入中文,但是如果使用最新版本的 OpenVanilla 輸入中文的話,則是無論按下任何按鍵都沒有反應。
會造成這種狀況的原因是,最新版本的 OpenVanilla 程式是設定為 Unicode 語系,而似乎 Mac OS X 上的 Flash Player 似乎還無法正確偵測 Unicode 語系的輸入法,所以,除了 OpenVanilla 之外,其餘各種 Unicode 輸入法—例如作業系統內建的 Tamil 鍵盤,都無法在 Flash Player 中正常運作。
這樣看起來,比較是 Adobe 方面需要解決這個問題,而在 OpenVanilla 開發團隊這方面,則只能在這邊建議,如果您遇到這樣的問題,而且經常需要使用以 Flash 為基礎的各種應用程式,那麼,請先移除目前安裝使用的 Unicode 版本的 OpenVanilla,然後從 OpenVanilla 官方網頁上的下載、安裝、啟用與移除頁面上,下載繁體中文或簡體中文語系的版本,重新安裝使用。
(本文同步發表於 #osxchat blog)