2009/12/29

sphinx doctree

2010/08/09 追記:
@shibukawa
http://blog.shibu.jp/article/40049067.html
何か作ってくれてると
ステキ!!

Sphinx ついでに
Sphinx って reStructuredText って Wiki みたいな形式で文章書いて
make すると素敵にしてくれるって仕組みらしいんですが
これで HTML 作ってみると変にスペースが空くんですよ
っていうかそもそも HTML って変なスペース空くよね
Django の概要 — Django v1.0 documentation
ほら、「チュートリアルやリファレンス用ではあり ません」って
「り」と「ま」の間に空白入っちゃってるでしょ、これ改行なの

文章書いてたら改行するでしょ? え? しないの?

HTML は英語のこと考えて作ってあるからか、
や、どちらかというとブラウザの問題なんでしょうけど
改行があると表示するときに空白として扱うんですよね
日本語だったらブラウザが無視してくれればいいだけの話なんだけど
何とかしてよ、ブラウザ

と思ったら、IE7 は空白が無い!
Firefox, Opera, Chrome は空白になるのに
お前ら IE7 見習え!! (日本語のときの改行だけね)

で、今んとこ Firefox or Chrome を使っているので
空白嫌なら改行を無くすしかないなーと思いまして
ちょっと調べてみると docutils/parsers/rst/states.py の
RSTState class の paragraph って method で
        data = '\n'.join(lines).rstrip()
って改行入れてる
どっかで parse した段落の各行を lines に入れてて
この lines は indent は削除されているみたい
で、消された改行を復元してるのがココ

やっちゃいけないとは思いつつ直接いじっちゃいました、
        data = ''.join(lines).rstrip()
そしたら、
消えたよ! 改行が消えたよ!!
ひどいね! 英文引用とかだったらどうするんだろうね!!

でね、例えば、
Sphinx で language が ja で html を build するなら
この改行を消しちまいたいわけですよ

Sphinx で language って持ってますけど
多分 po file の処理にしか使ってなくて docutils には伝えておらず
print debug で確認もしてみたけどどうやら
Sphinx から呼ばれる docutils の language は en ぽくて
en にしてあるってよりは default が en ってだけなのかなぁ

一方で docutils も language って設定項目あるんだけど
これもやっぱり po file みたいなことをしてるだけみたい
まぁ self.document.settings.language_code は引けるので
それを元に join するところを場合分けするだけなんだけど

あと、html って RSTState に伝えるのはどうするのかなぁ〜
別に html を特別扱いしなくてもいいのかな?
改行要らないよね? そこまで

language_code で分岐くらいならまぁできそうなんだけど
Sphinx から docutils の language を指定するのが面倒になって
とりあえず放置することにしました
最悪改行無しの 1 行が凄い長い rst file を書けばいいんだしね!!

Shpinx の話でなくて docutils の話だな、これ

ちなみに pTeX は改行どうしてるかっていうと
行の最後と次の行の最初の文字の種類で
空白を入れるかどうか判断してるはずなんだけど
今試したら日本語で終わって日本語が始まったら改行無視で
その他の場合は空白を入れるっぽい
正しい
句読点とか禁則処理とかまでは面倒だから調べない

0 件のコメント:

コメントを投稿