プレーンテキストからビジュアルな文書を生成できるreStructuredTextとrst2a

  reStructuredText は、文書を読みやすくしてくれるライトウェイトなマークアップ言語だ。見た目に美しいHTML、PDF、XML、さらにはS5の各ドキュメントを、プレーンテキストファイルから生成することができる。

 reStructuredTextは、プレーンテキストをより好ましいフォーマットの文書に変換するためのオープンソースのテキスト処理システム、 Docutils の一部である。DocutilsはPythonで書かれており、大半のLinuxディストリビューションにはパッケージが用意されている。LinuxおよびMicrosoft Windows環境ではソースからのインストールも可能だ。

 reStructuredTextは、PythonのDocStringをはじめとする、ドキュメンテーションの領域で使われるマークアップ構文として登場した。目指したのはシンプルでわかりやすく、それでいて重要な用途にも使えるものだった。その後、より汎用的なマークアップ言語へと発展を遂げた。reStructuredTextには、文書フォーマットの変換が簡単に行える次のようなスクリプト群が付属している。

  • rst2html.py:ネットで公開可能なHTML文書にエクスポートする。
  • rst2latex.py:LaTeX形式へのエクスポート用スクリプト。LaTeX文書からはPDFやPostScriptファイルを生成できる。
  • rst2s5.py:S5形式へのエクスポート用。S5ファイルを使うとWebベースのプレゼンテーションが生成できる。
  • rst2xml.py:Docutils固有のXML出力へのエクスポート用。その結果はXSLTのような標準のXMLツールを使って任意の最終形式に変換できる。

 どのスクリプトも実行は簡単だ。いずれも、入力として特殊な形式のテキストファイルが必要になる。ここでは「demo.txt」という次のサンプルファイルを入力として使うとしよう。

=================
Title
=================

Section
=================

* this is a list item
* a list item can span more than one line -
 just align the continuing text after the
 bullet and white space
* another list item

 この文書を処理するには「rst2html.py demo.txt demo.html 」というコマンドを実行すればよい。すると、次のようなHTMLコードが生成される(ここでは、HTMLコードのみに注目するため、埋め込まれたCSSコードは省略)。

<div class="document" id="title">
<h1 class="title">Title</h1>
<h2 class="subtitle" id="section">Section</h2>
<ul class="simple">
<li>this is a list item</li>
<li>a list item can span more than one line -
just align the continuing text after the
bullet and whitespace</li>
<li>another list item</li>
</ul>
</div>

 どのスクリプトも、追加パラメータによってドキュメント生成の処理をかなりの範囲でカスタマイズできる。特に、S5スライドショーの生成でありがたかったのが、「rst2s5.py」スクリプトでデフォルト以外のテーマも使えたことだ。そのため、自分のセンスに合ったプレゼンテーションが得られる。

 PDF文書を生成するには、最初にLaTeXファイルを生成し、それを入力としてLaTeXを実行する。そうするとPSおよびPDFの各ファイルが生成される。この場合は、PDFが直接生成されるわけではない。あるいは、シェルスクリプトを書いて後処理を実行したり、「 rst2pdf.py 」というスクリプトを使ったりすることもできる。後者のスクリプトは、Pythonで書かれたオープンソースのPDFライブラリ、 ReportLab を使って、reStructuredTextのファイルからPDFへの直接変換を行うものだ。rst2pdfは日々開発が進められていてなかなか便利なので、そのうちにほかの正式スクリプトと同じようにreStructuredTextに付属するようになるだろう。

 また、OpenDocument Textファイルの生成には「 rst2odt.py 」が使えるかもしれない。今回は動作の確認を行わなかったが、順調に開発が進んでいるようだ。

rst2a.comの利用

 自作のスクリプトを用意してパラメータをカスタマイズすることで望みどおりの出力が得られるのはよいのだが、自作のスクリプトが手元にない状況でreStructuredTextファイルからPDFまたはHTML文書をすぐに生成するにはどうしたらよいだろうか。こうした場合のために、最近reStructuredTextの開発陣は rst2a.com というサイトを立ち上げた。reStructuredText形式でテキストを入力するかreStructuredTextファイルをアップロードし、出力の形式およびスタイルを選択すると、ほんの数秒で所望のファイルを作成してくれるというサイトだ。

 rst2a.comの主な目的は、reStructuredTextを使い始める際のハードルを低くすることにある。その場で新たなreStructuredTextを作成する際にはページ右側に説明が表示されるので、テキストを太字や斜体にするものなど、よく使う構文を簡単に習得できる。こうした説明は初心者の役には立つが、個人的にはreStructuredTextを生成する簡単なフロントエンドとして、もっとインタラクティブ性の高いAjaxエディタがあるとうれしい。rst2a.comには、レンダリングAPIのWebサービスも用意されている。これを利用すれば、ほかのWebアプリケーションでのreStructuredTextのサポートが簡単になる。

 reStructuredTextは、シンプルなプレーンテキストファイルからHTMLのようなビジュアル文書を生成できるすばらしい手段である。簡単な変換であれば難なく使えるが、処理が複雑になるとマニュアルをじっくりと読んだりサンプルを探したりする必要が出てくるだろう。実際、初めてこのツールを使って文書を作成するときには、WYSIWYG方式のエディタで作成するよりも時間がかかることがある。しかし、一度使い方を覚えてしまえば、プレーンテキストで書いた文書からさまざまな形式の文書を生成できるというメリットがはっきりとわかる。

Linux.com 原文