docutils 是 Python 世界裡最強大、簡單、常用的 plaintext markup 語言與處理工具,定義了 reStructuredText 標記語言 (a.k.a rst),並且開放完整的 API 供開發人員對 rst 進行操作。docutils 本身內建有幾種轉換程式,可以把 rst 轉換成 HTML, HTML S5 (由 HTML 及 JavaScript 所構成的投影片應用) 以及 LaTeX 等格式。
rst 功能強大,很適合用來撰寫網路文件。如果能夠進一步掌握 docutils API,更可以自行撰寫程式,把以 rst 寫成的文件轉換成任意的格式。我們能夠用 rst 來當作日常撰文的格式,在需要的時候用 docutils 所提供的指令稿轉換為 HTML, LaTeX 等檔案,或是利用 docutils API 輸出成我們自已想要的格式。
docutils API 很清楚地將 rst 的處理工作分成四個部分 (請參考 Docutils Hacker's Guide):read, parse, trasform, write;讀析轉寫。我們關心的是輸出,只要實作自訂的 writer 即可。
這兩天花了幾個小時改出一個客製版的 docutils writer。修改的過程相當愉快,很順利地就從研究 docutils writer 的過程中了解了 docutils 內部的資料結構。經過 docutils 讀取、解析、轉換後的 rst 會變成一個樹狀結構,writer 將從根部的 document 節點一路巡訪到最後一個葉節點,完成整份文件的輸出動作。
如果有興趣研究 docutils writer 的話,可以從 docutils.writers.html4css1 開始讀起,再參考 docutils.nodes 裡面定義的節點與結構。用 docutils 來製作自己的 rst 轉檔程式會是一件簡單而有趣的事情。