- TracWiki – The Trac Project #ril
- WikiFormatting – The Trac Project #ril
- 直接輸入
http://...
或[<LINK> <LABEL>]
(注意 link 與 label 的順序)
參考資料:
- TracLinks – The Trac Project #ril
- 在提示支援 Wiki formatting 的地方,Trac link 可以建立不同 entity 間的連結,例如 ticket、report、changeset、wiki page、milestone 等
- Trac link 通常以
type:id
的形式出現,其中id
是可以識別某個項目的編號、名稱、路徑。也常同時出現[link label]
與[[link|label]]
的用法,差別在於後者用|
明確隔開 link 與 label。
-
方向上是先轉 HTML 再取出文字,後段的工具很多,但 Trac 有自己的語法,要轉 HTML 並沒有其他獨立的套件可用。
-
要從 Trac source code 抽取出
trac.wiki.formatter.format_to_html()
似乎不太可行,因為牽扯太廣,而且也不相容 Python 3。 -
可以考慮 RPC API 的
string wiki.wikiToHtml(string text)
雖然 wiki 有
wiki.getPageHTML(string pagename, int version=None)
可以用,但 ticket 就沒有類似的接口,再加上 wiki text 可能內含[[TicketQuery]]
這類處理起來相當耗時、對本文也沒有幫助的 macro,比較通用的方式是先取得 wiki、ticket、comment 的 wiki text,去掉 macros 之後,再交給wiki.wikiToHtml(string text)
轉換成 HTML。
參考資料:
-
trac-1.2.3 in tags – The Trac Project
從
trac.wiki.formatter.format_to_html()
開始:-
def format_to_html(env, context, wikidom, escape_newlines=None): if not wikidom: return Markup() if escape_newlines is None: escape_newlines = context.get_hint('preserve_newlines', False) return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
如何拿到
env
、context
及wikidom
? -
if isinstance(wikidom, basestring): wikidom = WikiParser(env).parse(wikidom)
Wiki DOM 可以用
trac.wiki.parser.WikiParser.parse(wiki)
產生,但還是得用到env
。 -
WikiParser
繼承自trac.core.Component
,而trac/core.py
沒再 import 其他 module。
到這裡想放棄了 ...
-
-
不考慮 RPC API
string wiki.wikiToHtml(string text)
的原因? 或許先用string wiki.getPage(string pagename, int version=None)
取得 wiki text,去掉耗時的 markup 之後 (例如 macros),再交給string wiki.wikiToHtml(string text)
轉換?許多 macro 都是在 wiki page 上 "附加" 內容,可以考慮只保留
[[Image]]
,其餘全部去掉;其實[[Image]]
也跟文字內容無關,完全略過 macro 也沒問題。
社群:
文件:
更多:
手冊: