odtwriterを使ったテキストからODFへのファイル変換

 OpenDocumentフォーマット(ODF)形式のファイルとして保存するには、OpenOffice.org、KWord、AbiWordを使用すればいいが、ODFファイルの作成はそうした方式だけに限られる訳ではない。その1つがodtwriterであり、これはマークアップ言語のreStructured Textを使って構文指定されたプレインテキストファイルをODT(OpenOffice.org Writer互換のODF)ドキュメントに変換するためのツールである。

 このodtwriterを使えば、軽量版LinuxディストリビューションのようなODF互換のワードプロセッサがインストールされていないマシンであってもODFファイル作成が可能となるし、あるいはテキストエディタで作成したドキュメントを指定の構文でodtwriterに処理させるという用途にも対応している。

 odtwriterは、プレインテキストファイルを、HTML、XML、LaTeXなどのフォーマットに変換するdocutilsという一連のツール群の1つとして用意されている。これはつまり、適切な構文指定のされたテキストファイルがあれば、それをODF以外のフォーマットにも変換できるということである。これらのツールを利用することは、例えばクリーンなHTMLファイルだけを必要とするような場合において、Writer上で作成したODTドキュメントを複数のステップを経て変換するよりも効率的なアプローチが可能となるはずだ。

 またodtwriterには、OpenOffice.orgにはない独自の機能もいくつか装備されている。例えばOpenOffice.orgは構文強調表示の機能をサポートしていないので、Writerドキュメントで表示するコードブロックの可読性と簡潔性を維持するのは一苦労となる。それに対してodtwriterでは、生成されるODTドキュメント上でのコードブロックの構文強調表示をさせることができる。

 その一方でodtwriterを用いたODFドキュメント生成に付随する最大の欠点は、そのためのマークアップ言語を新たに習得しなければならない点であろう。ただしこの負担は、一般に思われているほど大きくないかもしれない。それというのもreStructured Textで使われるマークアップはwikiマークアップとよく似ているため、そうした知識を有している人間であれば基本はすぐにマスターできるはずだからだ。またこのマークアップ言語については、「reStructured Text Primer」、「Quick Reference」、「Cheat Sheet」などの手堅くまとめられたドキュメント類が整備されているので、参考用に目を通すだけでも面白いかもしれない。

 新規にodtwriterを使用し始めるにあたっては、各自のマシンにdocutilsおよびPygmentsという2つのパッケージをインストールしておく必要がある。ただし後者のパッケージは、構文強調表示機能を使用する場合にだけ必要となる。Ubuntuの場合は「sudo apt-get install python-docutils python-pygments」というコマンドを実行するだけで両方のパッケージをインストールすることができる。次にodtwriter本体をインストールするが、その手順としては、最新版リリースをダウンロードしたものを解凍してから下記のコマンドを実行すればいい。

python setup.py build
sudo python setup.py install

 odtwriterを実行する際の構文指定にも特に難しい点はなく、rst2odt.pyコマンドにソースとなるテキストファイルとターゲットとなるODTドキュメントを指定するだけで、必要な変換作業が行われる。

rst2odt.py text.txt document.odt

 また多くのコマンドライン形式ツールと同様に、odtwriterもフラグ指定をサポートしているが、そのうちの2つは最低限押さえておいた方がいいだろう。その1つは構文強調表示に関するものであり、この機能はデフォルトでオフにされているので、odtwriterで実行させるには「--add-syntax-highlighting」フラグを指定しておく必要がある。

rst2odt.py --add-syntax-highlighting text.txt document.odt

 これによりPythonの構文強調表示がソーステキストにおけるコードブロック(リテラルブロックとしてのマーキング部)に適用される。他のプログラミング言語におけるコードブロックについては、いわゆるディレクティブをソーステキストに追加することで、当該言語(または字句解析プログラム)による強調表示機能を有効化させる必要がある。

.. sourcecode:: on
.. sourcecode:: Java

 odtwriterによる構文強調表示機能は、実際にはPygmentsユーティリティが担っているため、同ユーティリティがサポートしている言語ならばそのまま使用することができる。サポート対象の言語およびその省略名はPygmentsのWebサイトで確認して頂きたい。

 こうした構文強調表示機能の他にodtwriterでは、ソーステキストにOpenOffice.orgのスタイルを適用する機能が装備されている。スタイルシートを指定せずにrtst2odt.pyコマンドを実行すると、生成されるODTドキュメントは、デフォルトのパラグラフおよびキャラクタスタイルが適用されたものとなる。その一方でスタイルシート用の特殊なODTファイルを指定しておくと、マークアップされたテキストのodtwriterによる変換時において独自スタイルの適用ができるのである。

 変換時に適用させるスタイルを記述したODTファイルについては、そのパスをodtwriterに指定すればいい。スタイルシートファイル自体は通常のODTドキュメントを利用できるが、そうしたドキュメントの内部には、rststyle-textbody、rststyle-footer、rststyle-codeblockなどのrststyle用プレフィックスを用いたカスタムスタイルを記述しておく必要がある。odtwriterにはサンプル用のstyles.odtというスタイルシートファイルが付属されているので、これをOpenOffice.org Writerで開いて必要な修正を施したものを流用してもいいだろう。odtwriterに使用させるスタイルシートは、「--stylesheet」あるいは「--stylesheet-path」フラグを付けて指定する。前者のフラグはスタイルシートをURL形式で指定するためのものだが、後者のフラグは現在作業中のディレクトリに対する相対パスで指定するためのものである。例えば現在作業中のディレクトリにあるstyles.odtファイルを使用する場合は、次のようにコマンドを指定すればいい。

rst2odt.py --stylesheet-path=styles.odt text.txt document.odt

 本稿の解説は以上で終了である。odtwriterの使用法そのものは単純なものだが、reStructured Textマークアップ言語およびスタイルシートをサポートしていることが、同ツールをして、プレインテキストファイルからODFドキュメントを作成するための強力なソリューションに仕上げていると評していいだろう。

Dmitri Popovは、フリーランスのライターとして、ロシア、イギリス、アメリカ、ドイツ、デンマークのコンピュータ雑誌に寄稿している。

Linux.com 原文