SnipSnap hacking I 
我在
2005-02-11 中提到要 Hack SnipSnap 以輸出更恰當的 Label 搜尋結果。目前的 hack 過程如下:
- 先在 LabelSearchMacro.java 中測試如何擷取出每一篇 snip 的標題。
- 發現 LabelSearchMacro.java 是將查詢結果 (統統是繼承自 Snip 的 SnipImpl 物件) 交給 output() 去輸出,這個 output() 函式來自於 ListOutputMacro.java 。
- 在 ListOutputMacro.java 中依是否設定 formatter 決定將輸出動作交給 defaultFormatter 或是指定的 formatter,而 defaultFormatter 其實是 SimpleList.java 。
- 因為沒有自訂的 formatter ,所以看起來只要修改 SimpleList.java 即可。
- 在 SimpleList.java 中檢驗每一個待輸出的物件類別,分別寫到串流中輸出到前端。
- 因為每一個 snip 都有一個 permalink,所以可以透過 snip.getLink() 方式取得這個 permalink。不過問題就在這邊:SnipImpl.getLink() 送出的格式並非參考該 snip 內設定的第一個標題字串而是看該 permalink 最後一層的名稱為顯示的內容,我不想要這種顯示方式。
- 從這邊看來,有幾種修改方式:
- 在 SimpleList.java 中內建 permalink 的產生動作:好處是只要改一個檔案即可;壞處是可能破壞其他非屬 Label Search 動作的輸出結果,而且只要
SnipSnap 一改版就得將相關的程式全部重新 patch 一遍。
- 改 SnipImpl.java 內容,將 permalink 的產生動作替換成自己的版本:和上述方式一樣有一改版就得 patch 所有相關的程式碼。
- 新增一個 Formatter 來處理 permalink 的產生及排列動作:因為是外掛的程序,當
SnipSnap 改版時的修改幅度最小(只要讓 LabelSearchMacro.java 能指定使用該 Formatter 進行輸出即可),不過如何設定使用自訂的 Formatter 則要研究一下才知道。
- 新增一個 Label Search 的 Macro 及一個 Formatter:原則上可以複製原 LabelSearchMacro.java 的內容,且直接指定使用自訂的 Formatter 進行輸出,且當
SnipSnap 更版時應該不用跟著進行 patch 。目前就以這個方式為首要方案吧!
那啥時會有一個完整的 solution 呢?
哇啊哉… :p