2010-06-30

rst2odt.py 用の stylesheet を作る準備

rst2odt.py の変換結果がイロイロまずい

先日、docutils を使った OOo Writer (.odt ) 形式への変換 を試してからサクっと一ヶ月が経ったわけだけど、あれは実はあのままでは面白くない。というのも

フォントなどのスタイル情報が自分の好みに合わない。

結果として手作業で一つ一つスタイルを合わせ直さないといけないんだとすると、全然省力化になっていない。そもそもこの「マウスを握ってポチポチやらなきゃいけない感」がきらいだからこそ Office がきらいだと言っても過言ではないのに、そこが改善されないままではいくらスタートが reST であってもダメダメである。

スタイルシートを与えて変換する

ではどうしたらいいのかというと、ちゃんと方法がある。help を見ると

$ rst2odt.py --help
Usage
=====
  rst2odt.py [options] [<source> [<destination>]]

Generates OpenDocument/OpenOffice/ODF documents from standalone
reStructuredText sources.  Reads from <source> (default is stdin) and writes
to <destination> (default is stdout).  See
<http://docutils.sf.net/docs/user/config.html> for the full reference.

Options
=======
(snip)
ODF-Specific Options
--------------------
--stylesheet=STYLESHEET
                        Specify a stylesheet.  Default: "/opt/local/Library/Fr
                        ameworks/Python.framework/Versions/2.6/lib/python2.6
                        /site-packages/docutils-0.6-py2.6.egg/docutils/writers
                        /odf_odt/styles.odt"

と書かれているので、

--stylesheet=STYLESHEET

を与えればよいことが分かる。また、このときデフォルトで与えられる stylesheet のファイルが分かる1ので、次にこれを cp して中身を確認してみる。

ODTWriter の stylesheet の中身を見る

最初に引っかかったのが

stylesheet として与えるものが .odt であるということは、これは Writer のファイルそのものであって、テンプレート ( .ott ) ではない

ということだった。というのも、GUI で文書を作るときにはテンプレートを作ってそれが見た目の基準になるのが基本的な流れだから。どうも docutils の ODTWriter の考え方は違うらしい。

話がそれたが、OOo のファイルフォーマットである ODF ( Open Document Format ) は XML でかつ ZIP アーカイブだということは知っていたので、まずは styles.odt を展開してみる。

$ unzip styles.odt -d styles
Archive: styles.odt
extracting: styles/mimetype
inflating: styles/content.xml
inflating: styles/styles.xml  <- コレ
extracting: styles/meta.xml
inflating: styles/Thumbnails/thumbnail.png
inflating: styles/Configurations2/accelerator/current.xml
creating: styles/Configurations2/progressbar/
creating: styles/Configurations2/floater/
creating: styles/Configurations2/popupmenu/
creating: styles/Configurations2/menubar/
creating: styles/Configurations2/toolbar/
creating: styles/Configurations2/images/Bitmaps/
creating: styles/Configurations2/statusbar/
inflating: styles/settings.xml
inflating: styles/META-INF/manifest.xml

もう正解は書いちゃったけど、それっぽい名前のファイルが見つかった。まずは font の設定を変更したいので font 関連の記述のあるファイルを探そう。

$ grep -rl font *
content.xml
settings.xml
styles.xml

※ ここで役に立つのが(実際には同日の作業なんだけど)昨日のエントリとして書いたxml-modeのindentとそれを活かすための改行の挿入である。

content.xml は内容っぽいのであやしいのは settings.xml と styles.xml かな。このうち settings.xml は font の設定はないっぽい。となると styles.xml か。

ということで styles.xml をいじっていけばよいらしいことが分かった。

該当スタイルを見ておく

最初何も考えずに styles.xml をいじり始めて「反映されない!」と騒いでいたんだけど、よくよく見れば当たり前。変換後の文書を注意深く見てみると分かるんだけど、rst2odt.py で生成した文書は通常の「見出し」などの書式ではなく

"rststyle-heading1" のような書式が割り当てられている。

そうか、これをいじるのか。ということは 'rststyle-*' を対象にスタイルを考えていけばいいのか。

とりあえず今日はここまで。

参考

ざっと手順を追ってみたけど、後で調べたらちゃんと資料があった。まぁ当たり前か。

関連エントリ

  1. 上の場所は MacPorts で入れた Python 2.6 の docutils 0.6 の場合 

About

例によって個人のなんちゃらです