2011年8月5日金曜日

Sphinxとrst2pdfの「domains」がないよエラー

■環境
Ubuntu 9.10
Python 2.6.4
Sphinx 1.07
rst2pdf 0.16
sudo aptitude install build-essential python-setuptools python-sphinx python2.6-dev texlive-full
sudo easy_install -UZ PIL
sudo easy_install -UZ reportlab
sudo easy_install rst2pdf

でSphinxのドキュメントをPDFにしようとすると次のエラーがでる。
AttributeError: BuildEnvironment instance has no attribute 'domains'
そんな値ねーよ!って怒られる。
色々調べてみたけど、どうしてもコレが解決しなかったのでrst2pdfの最新ソースみてみた。

pdfbuilder.py

これの227行目。
if indices_config and hasattr(self.env, 'domains'):
超ドストレートな修正が入ってた(;゚Д゚)

という分けでソースを直に編集する。
sudo vi /usr/local/lib/python2.6/dist-packages/rst2pdf-0.16-py2.6.egg/rst2pdf/pdfbuilder.py

OK、通った。

で続いて
too many values to unpack
というエラーが出るのでこれに対処する。設定ファイルであるja.jsonを編集する

"embeddedFonts" :
[[
"VL-Gothic-Regular.ttf",
"VL-PGothic-Regular.ttf",
"ipam.ttf",
"ipag.ttf",
"ipagp.ttf", ←削除する
"ipamp.ttf" ←削除する
]],
とするとこのエラーは消える。

次は
[ERROR] pdfbuilder.py:129 FragLine instance has no attribute 'lineBreak'
というエラー。これもソースコードが問題っぽい。

これもソースコード修正すれば行けるっぽい
sudo vi /usr/local/lib/python2.6/dist-packages/reportlab-2.5-py2.6-linux-i686.egg/reportlab/platypus/paragraph.py
で335行目付近を以下の様に編集

# simple = last or abs(extraSpace)<=1e-8 or line.lineBreak ←オリジナル。コメントアウトする
simple = last or abs(extraSpace)<=1e-8 or getattr(line, 'lineBreak', False) ←追記する

でOK。 後Sphinxで使うCSSを編集したい場合は
/usr/share/sphinx/themes
/usr/local/lib/python2.6/dist-packages/Sphinx-1.1-py2.6.egg/sphinx/themes
以下にCSSがあるんでそれをいじる。或いはここに作った奴を配置する。 blockdiagを入れる。
sudo easy_install sphinxcontrib-blockdiag
でconf.pyに以下の2つを追加する。フォントはTrueTypeである必要有り
extensions = ['sphinxcontrib.blockdiag'] blockdiag_fontpath = '/usr/share/fonts/truetype/ipafont/ipagp.ttf'
以下の様に書けば図が出来る
.. blockdiag:: diagram admin { top_page -> config -> config_edit -> config_confirm -> top_page; }
コメントを投稿